专栏名称: 码农小胖哥
技术公众号:码农小胖哥
目录
相关文章推荐
51好读  ›  专栏  ›  码农小胖哥

Spring Security 实战干货:基于注解的接口角色访问控制

码农小胖哥  · 掘金  ·  · 2019-11-18 22:18

正文

阅读 0

Spring Security 实战干货:基于注解的接口角色访问控制

1. 前言

欢迎阅读 Spring Security 实战干货 系列文章 。在上一篇 基于配置的接口角色访问控制 我们讲解了如何通过 javaConfig 的方式配置接口的角色访问控制。其实还有一种更加灵活的配置方式 基于注解 。今天我们就来探讨一下。DEMO 获取方式在文末。

2. Spring Security 方法安全

Spring Security 基于注解的安全认证是通过在相关的方法上进行安全注解标记来实现的。

2.1 开启全局方法安全

我们可以在任何 @Configuration 实例上使用 @EnableGlobalMethodSecurity 注解来启用全局方法安全注解功能。该注解提供了三种不同的机制来实现同一种功能,所以我们单独开一章进行探讨。

3. @EnableGlobalMethodSecurity 注解

 @Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
 @Target(value = { java.lang.annotation.ElementType.TYPE })
 @Documented
 @Import({ GlobalMethodSecuritySelector.class })
 @EnableGlobalAuthentication
 @Configuration
 public @interface EnableGlobalMethodSecurity {
 
     /**
      * 基于表达式进行方法访问控制
      */
     boolean prePostEnabled() default false;
 
     /**
      * 基于 @Secured 注解
      */
     boolean securedEnabled() default false;
 
     /**
     * 基于 JSR-250 注解
      */
     boolean jsr250Enabled() default false;

     boolean proxyTargetClass() default false;

     int order() default Ordered.LOWEST_PRECEDENCE;
 }复制代码

@EnableGlobalMethodSecurity 源码中提供了 prePostEnabled securedEnabled jsr250Enabled 三种方式。当你开启全局基于注解的方法安全功能时,也就是使用 @EnableGlobalMethodSecurity 注解时我们需要选择使用这三种的一种或者其中几种。我们接下来将分别介绍它们。

4. 使用 prePostEnabled

如果你在 @EnableGlobalMethodSecurity 设置 prePostEnabled true ,则开启了基于表达式的方法安全控制。通过表达式运算结果的布尔值来决定是否可以访问( true 开放, false 拒绝 )。有时您可能需要执行开启 prePostEnabled 复杂的操作。对于这些实例,您可以扩展 GlobalMethodSecurityConfiguration ,确保子类上存在 @EnableGlobalMethodSecurity(prePostEnabled = true) 。例如,如果要提供自定义 MethodSecurityExpressionHandler :

 @EnableGlobalMethodSecurity(prePostEnabled = true)
 public class MethodSecurityConfig extends GlobalMethodSecurityConfiguration {
     @Override
     protected MethodSecurityExpressionHandler createExpressionHandler() {
         // ... create and return custom MethodSecurityExpressionHandler ...
         return expressionHandler;
     }
 }复制代码






请到「今天看啥」查看全文