美文网首页
3.8 Spring Security配置方法安全注解

3.8 Spring Security配置方法安全注解

作者: Mongogo | 来源:发表于2018-01-23 10:22 被阅读0次

    从版本2开始,Spring Security大大增强了对服务层方法添加安全性的支持。它提供了对JSR-250注解以及框架原始的@Secured注解的安全性的支持。从3.0开始你也可以使用新的基于表达式的注解。你可以应用安全性到一个单例bean,使用 intercept-methods 元素去修饰这个bean的声明,或者你可以使用使用AspectJ样式切入点保护整个服务层的多个bean。

    3.81 EnableGlobalMethodSecurity

    我们可以在任意的@Configuration注解的实例上使用@EnableGobalMethodSecurity注解来启用基于注解的安全配置。例如,下面将启用Spring Security的@Secure注解。

    @Configuration
    @EnableGlobalMethodSecurity(securedEnabled = true)
    public class MethodSecurityConfig {
    // ...
    }
    

    在方法上(也可以在类或接口上)添加注解将相应地限制对该方法的访问。Spring Security的本地注解支持为该方法定义了一组属性。这些信息将传递给访问决策管理器(AccessDecisionManager ),以便它做出实际的决定:

    public interface BankService {
    
    @Secured("IS_AUTHENTICATED_ANONYMOUSLY")
    public Account readAccount(Long id);
    
    @Secured("IS_AUTHENTICATED_ANONYMOUSLY")
    public Account[] findAccounts();
    
    @Secured("ROLE_TELLER")
    public Account post(Account account, double amount);
    }
    

    可以使用以下方法启用对JSR-250注解的支持:

    @Configuration
    @EnableGlobalMethodSecurity(jsr250Enabled = true)
    public class MethodSecurityConfig {
    // ...
    }
    

    这些是基于标准的并允许应用简单的基于角色的约束,但是没有Spring Security的本地注解的支持。若要使用新的基于表达式的语法,请参考以下使用:

    @Configuration
    @EnableGlobalMethodSecurity(prePostEnabled = true)
    public class MethodSecurityConfig {
    // ...
    }
    

    和它等价的Java代码是:

    public interface BankService {
    
    @PreAuthorize("isAnonymous()")
    public Account readAccount(Long id);
    
    @PreAuthorize("isAnonymous()")
    public Account[] findAccounts();
    
    @PreAuthorize("hasAuthority('ROLE_TELLER')")
    public Account post(Account account, double amount);
    }
    

    3.8.2 GlobalMethodSecurityConfiguration

    有时你可能需要执行比使用@EnableGlobalMethodSecurity注解允许的操作更复杂的操作。对于这种场景写,我们可以去扩展GlobalMethodSecurityConfiguration确保子类中存在@EnableGlobalMethodSecurity注解。例如,如果你想提供自定义MethodSecurityExpressionHandler处理逻辑,你可以使用以下配置:

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

    其他更多有关Spring Security的方法安全注解,请到Spring Security官方文档查看。

    相关文章

      网友评论

          本文标题:3.8 Spring Security配置方法安全注解

          本文链接:https://www.haomeiwen.com/subject/icgjaxtx.html