3.8 Spring Security配置方法安全注解

2018-01-23  本文已影响0人  Mongogo

从版本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官方文档查看。

上一篇下一篇

猜你喜欢

热点阅读