基于角色或权限进行访问控制

一.hasAuthority方法("针对一个")

如果当前的主体具有指定的权限,这返回true,否者返回false

1.在配置类设置当前访问的地址有哪些权限

.antMatchers("/test/index").hasAuthority("admins")


config类中进行一个修改

@Override
protected void configure(HttpSecurity http)throws Exception{

http.formLogin()//自定义自己编写的

.loginPage("/login.html")//登录页面设置
.loginProcessingUrl("/user/login")//登录访问路径
.defaultSuccessUrl("/test/index").permitAll()//登录成功之后,跳转路径
.and().authorizeRequests()
.antMatchers("/","/test/hello","/user/login").permitAll()//设置那些路径可以直接访问,不需要认证
//当前登录用户,只有具有admin权限才可以访问这个路径

   .antMatchers("/test/index").hasAuthority("admins")
.anyRequest().authenticated()//所有请求都可以访问
.and().csrf().disable();//关闭csrf防护
}
修改以下部分
.antMatchers("/","/test/hello","/user/login").permitAll()//设置那些路径可以直接访问,不需要认证
//当前登录用户,只有具有admin权限才可以访问这个路径
.antMatchers("/test/index").hasAuthority("admins")
.anyRequest().authenticated()//所有请求都可以访问
第二步:在UserDetailsService,把返回user对象设置权限
List<GrantedAuthority>auths=

AuthorityUtils.commaSeparatedStringToAuthorityList("admins");
其中admins和config配置类
.antMatchers("/test/index").hasAuthority("admins")一样
进行一个测试
把List<GrantedAuthority>auths=
AuthorityUtils.commaSeparatedStringToAuthorityList("abc");
权限改为abc在设置一个不能直接访问的页面进行一个登录
比如把/test/hello这个路径设置不能直接进去
.antMatchers("/","/user/login").permitAll()//设置那些路径可以直接访问,不需要认证


springboot中使用Spring Security 做角色或权限进行访问控制二_登录页面

 

 会出现这个表示没有权限

只有权限是一样的才会登录成功

springboot中使用Spring Security 做角色或权限进行访问控制二_登录页面_02

第二中方法:hasAnyAuthority方法(针对多个)

 

 如果当前的主体有任何提供的角色(给定的作为一个逗号分隔的字符串列表)的话,返回true

.antMatchers("/test/index").hasAuthority("admins,manager")
这个方法设置多个权限是不行的
.antMatchers("/test/index").hasAnyAuthority("admins,manager")
使用这个只要满足其中一个条件就可以

第三个方法hasRole


   如果用户具备给定角色就允许访问,否则出现 403。


   如果当前主体具有指定的角色,则返回 true。

先把第二步注释掉:
.antMatchers("/test/index").hasAnyAuthority("admins,manager")
写上:
.antMatchers("/test/index").hasRole("sale")//后面写的是角色
第二步:修改service层
//设置权限不能为空必须有值
List<GrantedAuthority>auths=
AuthorityUtils.commaSeparatedStringToAuthorityList("admins,ROLE_sale");


4 hasAnyRole


表示用户具备任何一个条件都可以访问。


给用户添加角色


 

 


修改配置文件:


 

 角色不对就报403没有权限访问

There was an unexpected error (type=Forbidden, status=403).
自定义403页面
新增unauth.html
写上一句话
<h1>没有访问的权限</h1>
在配置类直接设置


 

 

@Override
protected void configure(HttpSecurity http)throws Exception{
//配置没有权限访问跳转自定义页面
http.exceptionHandling().accessDeniedPage("/unauth.html");
}
执行会直接跳转我们设置的页面