【问题标题】:Secure Admin Panel (Spring Security)安全管理面板(Spring Security)
【发布时间】:2016-01-26 18:04:52
【问题描述】:

我想保护管理面板。我已添加到 Spring Security:

 .antMatchers("/admin/**").hasAuthority("ADMIN")

我的 User 模型包含(实现 UserDetails ):

    @Override
    @OneToMany(fetch=FetchType.LAZY, mappedBy = "user", cascade = CascadeType.ALL)
    @JsonIgnore
    public Set<Authority> getAuthorities() {
        return authorities;
    }

    public void setAuthorities(Set<Authority> authorities){
        this.authorities = authorities;
    }

Authority 模型包含(实现 GrantedAuthority):

@ManyToOne
    @JoinColumn(name="user_id")
    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

问题:当我用 andMatchers 添加这一行并尝试访问这个控制器时,它显示错误:

<pre>java.lang.NullPointerException
    org.springframework.security.core.authority.AuthorityUtils.authorityListToSet(AuthorityUtils.java:39)
    org.springframework.security.access.expression.SecurityExpressionRoot.getAuthoritySet(SecurityExpressionRoot.java:128)
    org.springframework.security.access.expression.SecurityExpressionRoot.hasRole(SecurityExpressionRoot.java:60)
    org.springframework.security.access.expression.SecurityExpressionRoot.hasAuthority(SecurityExpressionRoot.java:52)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    java.lang.reflect.Method.invoke(Method.java:483)

【问题讨论】:

    标签: spring hibernate spring-mvc spring-security


    【解决方案1】:

    由于安全评估可能是在事务之外进行的,因此请使用EAGER 获取权限。我还建议进行延迟初始化,以便该方法永远不会返回 null

    @OneToMany(fetch=FetchType.EAGER, mappedBy = "user", cascade = CascadeType.ALL)
    public Set<Authority> getAuthorities() {
        if (authorities == null)
            authorities = new HashSet<Authority>();
        return authorities;
    }
    

    【讨论】:

      猜你喜欢
      • 2011-01-22
      • 2016-08-07
      • 2014-02-05
      • 2016-12-27
      • 2018-01-31
      • 2015-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多