Spring Boot 2.x实战80 - Spring Security 4 - Spring Security的授权(Authorization)之方法安全

本文详细介绍了Spring Security在方法级别的授权(Authorization)机制,包括如何启用方法安全、使用@PreAuthorize、@PostAuthorize、@Secured等注解进行权限控制,并通过实例展示了如何在表达式中获取参数、调用Bean方法以及过滤返回值。此外,提到了新书《从企业级开发到云原生微服务:Spring Boot 实战》,该书涵盖了Spring Boot的多个核心主题。
摘要由CSDN通过智能技术生成
1.4.2 方法安全

Spring Security在方法级别进行权限控制,这样可以让权限控制更灵活。使用注解@EnableGlobalMethodSecurity开启方法安全注解的支持(组合了@Configuration注解):

@EnableGlobalMethodSecurity(prePostEnabled = true)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
   
  //...
}

使用了prePostEnabled = true后可支持下面注解来进行方法安全控制,其它类型的注解本书不做讨论。

  • @PreAuthorize:通过访问控制表达式控制在方法调用前决定方法是否允许被调用;
  • @PreFilter:定义规则过滤注解方法的参数(集合),filterObject代表集合或数据里的当前对象;
  • @PostAuthorize:当方法被调用后,访问控制表达式将被检查,若检查返回值表达式可使用returnObject
  • @PostFilter:定义规则过滤方法返回值(集合或数组),filterObject代表集合或数据里的当前对象。

同样我们也要学习下方法安全的原理,web路径安全是从FilterSecurityInterceptor开始的 ,而方法安装时通过MethodSecurityInterceptor开始的,他们都是AbstractSecurityInterceptor的子类。

  • MethodSecurityInterceptor:对方法安全进行授权操作;它由@EnableGlobalMethodSecurity导入的配置GlobalMethodSecurityConfiguration初始化。MethodSecurityInterceptor还实现了AOP的MethodInterceptor接口来拦截注解方法;拦截方法调用AccessDecisionManager对注解方法进行授权操作。
    • MethodSecurityInterceptor:提取使用注解(如@PreAuthorize)的方法元数据并存储和提供查询功能,它是由PrePostAnnotationSecurityMetadataSource实现类提供功能的。
  • AccessDecisionManagerdecide方法中被保护的资源对象类型为MethodInvocation
  • AffirmativeBased:由一组AccessDecisionVoter进行投票来授权;
  • AccessDecisionVoter:方法安全控制的主要实现有:PreInvocationAuthorizationAdviceVoter,它使用ExpressionBasedPreInvocationAdvice对表达式进行计算,从而达到对方法的访问控制。

我们的演示控制器内容如下:


                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值