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