首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >安全管理小组(春季安全)

安全管理小组(春季安全)
EN

Stack Overflow用户
提问于 2015-10-27 10:56:16
回答 1查看 421关注 0票数 0

我想确保管理面板的安全。我向Spring安全性添加了以下内容:

代码语言:javascript
运行
复制
 .antMatchers("/admin/**").hasAuthority("ADMIN")

我的用户模型包含(它实现了UserDetails ):

代码语言:javascript
运行
复制
    @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;
    }

权限模型包含(实现GrantedAuthority):

代码语言:javascript
运行
复制
@ManyToOne
    @JoinColumn(name="user_id")
    public User getUser() {
        return user;
    }

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

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

代码语言:javascript
运行
复制
<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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-27 12:16:02

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

代码语言:javascript
运行
复制
@OneToMany(fetch=FetchType.EAGER, mappedBy = "user", cascade = CascadeType.ALL)
public Set<Authority> getAuthorities() {
    if (authorities == null)
        authorities = new HashSet<Authority>();
    return authorities;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33366095

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档