1
<span sec:authentication="principal.authorities"></span>

打印出来是[admin]

WebSecurityConfigurerAdapter->configure 部分配置如下

1
2
http.authorizeRequests().antMatchers("/login").permitAll()
.antMatchers("/user/**").hasRole("admin");

但是实际上/user/index这个页面还是报错403(被禁止)

一直找资料都没找到原因,之后才发现是个小坑。。

我们在定义角色表的时候要在角色的前面加上 ROLE_ 前缀
不然security会认为这是权限,
或者在获取数据库角色的时候加上 “ROLE_”+数据库的角色名(例如:ADMIN)。

 

但是我个人建议写在 UserDetails 里面

1
2
3
4
5
6
7
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
List<GrantedAuthority> list = new ArrayList<GrantedAuthority>();
list.add(new SimpleGrantedAuthority("ROLE_"+user.getLevelConfig().getLName()));
return list;
//return Collections.singletonList(new SimpleGrantedAuthority(user.getLevelConfig().getLName()));
}

这样的话还是判断admin即可,几遍取出来是ROLE_adminn

发表评论