Spring Security框架如何授权
一、授权
授权的方式包括 web授权和方法授权
-
web授权是通过 url 拦截进行授权,重点学习内容
-
方法授权是通过方法拦截进行授权,通过注解的方式控制权限,粒度小,耦合度高
1、WEB授权
(1)、案例
我们可以做个例子,演示一下
1.准备工作,修改HelloController,增加两个方法 (根据hello方法复制后修改即可),主要是为了方便后边进行测试
@RequestMapping("/hello/user")
public String helloUser(){
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
String name = authentication.getName();
return "hello-user "+name;
}
@RequestMapping("/hello/admin")
public String helloAdmin(){
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
String name = authentication.getName();
return "hello-admin "+name;
}
2.修改 SecurityConfig 的securityFilterChain方法 ,添加对以上两个地址的角色控制
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http.formLogin() //自定义自己编写的登陆页面
.loginPage("/login.html") //登录页面设置
.loginProcessingUrl("/login") //登录访问路径
.permitAll()//登录页和登录访问路径无需登录也可以访问
.and()
.authorizeRequests()
.antMatchers("/css/**","/images/**").permitAll()
.antMatchers("/hello/user").hasRole("USER")
.antMatchers("/hello/admin").hasAnyRole("ADMIN")
.anyRequest().authenticated()
.and()
.csrf().disable(); //关闭csrf防护
return http.build();
}
3.测试
分别使用user和admin用户登录
-
user用户可以访问
/hello/user
-
admin用户可以访问
/hello/user
、/hello/admin
2、控制操作方法
上文只是将请求接口路径与配置的规则进行匹配,那匹配成功之后应该进行什么操作呢?Spring Security 内置了一些控制操作。
-
permitAll() 方法,所有用户可访问。
-
denyAll() 方法,所有用户不可访问。
-
authenticated() 方法,登录用户可访问。
-
anonymous() 方法,匿名用户可访问。
-
rememberMe() 方法,通过 remember me 登录的用户可访问。
-
fullyAuthenticated() 方法,非 remember me 登录的用户可访问。
-
hasIpAddress(String ipaddressExpression) 方法,来自指定 IP 表达式的用户可访问。
-
hasRole(String role) 方法, 拥有指定角色的用户可访问,传入的角色将被自动增加 “ROLE_” 前缀。
-
hasAnyRole(String... roles) 方法,拥有指定任意角色的用户可访问。传入的角色将被自动增加 “ROLE_” 前缀。
-
hasAuthority(String authority) 方法,拥有指定权限( authority )的用户可访问。
-
hasAnyAuthority(String... authorities) 方法,拥有指定任意权限( authority )的用户可访问。
原文地址:https://blog.csdn.net/susjj663/article/details/140623604
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!