Spring Security默认是禁用注解的,需要手动开启,作用是激活注解AOP校验,以方便Controller层代码判断用户是否具有访问权限
securedEnabled = true
开启 @Secured
注解过滤权限,根据官方文档 介绍
jsr250Enabled = true
开启@RolesAllowed 注解过滤权限(JSR-250注释不支持元注释。)
@RolesAllowed({"USER", "ADMIN"})
需要具有"USER", "ADMIN"任意一种角色。可以省略前缀ROLE_
,也可以是ROLE_ADMIN
@DenyAll
拒绝所有访问@PermitAll
prePostEnabled = true
激活4个表达式注解
@PreAuthorize
@PreAuthorize("#userId == authentication.principal.userId or hasAuthority(‘ADMIN’)")
void changePassword(@P("userId") long userId ){...}
- 参数userId的值是否等于principal中保存的当前用户的userId,或者当前用户是否具有ROLE_ADMIN权限
@PostAuthorize
@PostAuthorize("returnObject.userId == authentication.principal.userId or hasPermission(returnObject, 'ADMIN')");
@PreFilter
允许方法调用,但必须在进入方法之前过滤输入值
@PostFilter
允许方法调用,但必须按照表达式来过滤方法的结果
@PreFilter
@Retention(RetentionPolicy.RUNTIME)
@PreAuthorize("#contact.name == authentication.name")
public @interface MyPermission {}
用 @MyPermission
替代 @PreAuthorize("#contact.name == authentication.name")
Spring Security 中比较具有特色的就是 DSL,这个设计用起来非常灵活,但却让刚接触的小白十分头疼,一脸懵逼,写代码的时候各种搜索复制粘贴,好坏都有。DSL 设计的关键就是泛型,看Spring Security 代码你会发现他用泛型用上瘾了。
SecurityBuilder<O>
O build() throws Exception
,可以看到这个接口的作用就是创建一个对象interface SecurityConfigurer<O, B extends SecurityBuilder<O>>
init(B builder)
configure(B builder)
常用
abstract class SecurityConfigurerAdapter<O, B extends SecurityBuilder<O>> implements SecurityConfigurer<O, B>
SecurityConfigurer
的其中一个主要基类and()
常用
protected postProcess()
interface ObjectPostProcessor<T>
<O extends T> O postProcess(O object)
abstract class SecurityConfigurerAdapter
SecurityConfigurer
基础的抽象类interface WebSecurityConfigurer
extends SecurityConfigurer
WebSecurityConfigurerAdapter
是它唯一的直接实现WebSecurityConfigurerAdapter
implements WebSecurityConfigurerSpring security 有一套 dsl,其源码命名比较规范,如下:
final class AAAaaaConfigurer
configurers
包路径下。通常负责AAA 模块 aaa部分的配置项,XxxConfigurer
接口中configure
方法的参数,一般可以通过 aaa.dsl()进行配置final class AAAaaaConfigurer
、final class AAAbbbConfigurer
、final class AAAcccConfigurer
interface AAAConfigurer
configure(AAAaaaConfigurer aaa)
,参数的类型就是上面提到的final
类型的配置项class AAAConfigurerAdapter
AAAConfigurer
,作为AAAConfigurer
接口的适配器,如SecurityConfigurerAdapter
实现了 SecurityConfigurer
AAAConfigurerAdapter
),实现自定义的配置class AAAConfiguration
AAAConfigurerAdapter
,通常这种类应该由用户代码提供。AAAConfigurerAdapter
并注入到 Spring 中,那么 Spring 就会使用缺省配置。此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。