用户页面登录及未登录,简单角色权限区分
1.在继承WebSecurityConfigurerAdapter的类中定义操作所需的权限
http.formLogin() //表单登录
..... //登录配置
.and()
.authorizeRequests() //下面是授权的配置
.antMatchers(
.....
.....)
.permitAll() //以上请求不需要登录,任何人都有权限访问
.antMatchers("/user").hasRole("ADMIN") //只有拥有admin角色用户有权访问该路径,可以指定HttpMethod
.anyRequest()
.authenticated(); //需要身份认证(登录即可访问其他任何请求)
.and()
.csrf().disable() //关闭跨站请求伪造防护
2.在UserDetailsService的实现类中的SocialUser对象的参数中添加权限标识
private SocialUserDetails buildUser(String userId) {
// 根据用户名查找用户信息,包含对应的权限信息
....
// 添加权限标识
return new SocialUser(userId, password,
true, true, true, true,
AuthorityUtils.commaSeparatedStringToAuthorityList("ROLE_ADMIN"));
}
3.SpringSecurity权限表达式
表达式 | 说明 |
---|---|
hasRole([role]) | 用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀) |
hasAnyRole([role1,role2]) | 用户拥有任意一个制定的角色时返回true |
hasAuthority([authority]) | 等同于hasRole,但不会带有ROLE_前缀 |
hasAnyAuthority([auth1,auth2]) | 等同于hasAnyRole |
permitAll | 永远返回true |
denyAll | 永远返回false |
authentication | 当前登录用户的authentication对象 |
fullAuthenticated | 当前用户既不是anonymous也不是rememberMe用户时返回true |
hasIpAddress(‘192.168.1.0/24’)) | 请求发送的IP匹配时返回true |