我想确保管理面板的安全。我向Spring安全性添加了以下内容:
.antMatchers("/admin/**").hasAuthority("ADMIN")
我的用户模型包含(它实现了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;
}
权限模型包含(实现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)
发布于 2015-10-27 12:16:02
由于安全性评估可能是外部事务进行的,所以使用EAGER
获取权限。我还建议延迟初始化,以便该方法永远不会返回null
。
@OneToMany(fetch=FetchType.EAGER, mappedBy = "user", cascade = CascadeType.ALL)
public Set<Authority> getAuthorities() {
if (authorities == null)
authorities = new HashSet<Authority>();
return authorities;
}
https://stackoverflow.com/questions/33366095
复制相似问题