目录
自定义配置类之访问权限
匹配顺序规则
访问控制包含
访问控制url匹配
访问控制方法
角色、权限判断
使用注解进行角色权限控制
-
自定义配置类之访问权限
- http.authorizeRequests()主要是对url进行访问权限控制
- 通过这个方法来实现url授权操作
- 支持链式写法
-
匹配顺序规则
- 在所有匹配规则中取所有规则的交集
- 配置顺序影响了之后授权效果
- 越是具体的应该放在前面,越是笼统的应该放到后面
-
访问控制包含
- 访问控制url匹配
- 访问控制方法
- 角色判断
- 权限判断
-
访问控制url匹配
- anyRequest()
- 表示匹配所有的url请求
- antMatcher(String regx)
- 传递一个ant表达式参数,表示匹配所有满足ant表达式的请求
- ant表达式中特殊字符解释
- antMatcher(HttpMethod.*, String regx)
- 传递一个请求方法类型参数加ant表达式参数,表示匹配所有满足ant表达式的指定请求方式的url
- regexMatchers(String regexPattern)
- 传递一个参数使用正则表达式进行匹配
- 和antMatchers()主要的区别就是参数,antMatchers()参数是ant表达式,而regexMatchers()参数是正则表达式
- 演示案例: 使用正则表达式放行一个名称以demo结尾的js文件,让用户可以匿名访问
- regexMatchers(HttpMethod.*, String regexPattern)
- 演示案例: 使用正则表达式放行一个名称以demo结尾的js文件,让用户可以通过get请求匿名访问
-
访问控制方法
-
角色、权限判断
- 预置了两个用户,给用户也设置了权限, 现在用这两个用户来演示一下角色和权限的访问控制
- hasRole()
- 演示案列: 具有admin权限的用户才可以访问role.html
- hasAnyRole()
- hasAuthority()
- hasAnyAuthority()
- access()
- 上面实现的访问控制的方法都可以使用access()来代替,因为他们本质上都是调用了access()
-
使用注解进行角色权限控制
- 首先如果要启动spring security提供的角色权限注解的话,需要在配置类上添加@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)注解
- 这样才能开启@Secured和@PreAuthorize注解
- @Secured注解的使用
- 判断是否具有角色权限,匹配的字符串需要添加前缀“ROLE_角色权限”
- 作用:在用户向浏览器发送一个请求时会去访问控制器中的方法,然后在访问此控制器中的方法之前会先去UserDetailsService用户细节实现类的实现方法中return的User对象查看是否具有@Secured注解中指定的角色
- 如果有指定的角色,那么系统允许用户访问此控制器方法,否则,系统不允许访问此控制器方法
- @PreAuthorize注解的使用
- 进入方法之前进行角色权限认证
- 作用:在浏览器发送一个请求后,会访问控制器中的对应的方法,@PreAuthorize注解 会在访问控制器中的方法之前进行权限认证,看看UserDetailsService用户细节实现类中对应的用户有没有相应的权限,如果有那么该用户发送的请求可以进入控制器中对应的方法,如果没有相应的权限,那么用户发送的请求不能进去控制器中对应的方法;
- @PostAuthorize注解的使用
- 方法执行之后再判断用户的角色权限
- 响应结果获取到"in",匹配,说明权限可以访问
- 响应结果获取到"out",不匹配,说明权限不足, 抛出403异常
- 作用:在访问控制器中的相关方法之后(方法的return先不访问),进行权限认证,去看看UserDetailsService用户细节实现类中用户是否有对应的权限,如果有的话,那么控制器方法的最后一句return语句会执行,否则,控制器方法的最后一句return语句不会执行;