美文网首页Spring Security Oauth2.0认证授权
22.Spring Security应用详解-授权-方法授权

22.Spring Security应用详解-授权-方法授权

作者: LANSHENGYANG | 来源:发表于2020-03-28 13:30 被阅读0次

    方法授权

    • 现在我们已经掌握了如何使用http.authortizeRequests()对web资源进行授权保护,从Spring Security2.0版本开始,它支持服务层方法的安全性的支持。本节学习@PreAuthorize,@PostAuthorize,@Secured三类注解。
    • 我们可以在任何@Configuration实例上使用@EnableGlobalMethodSecurity注释来启用基于注解的安全性。
    • 以下内容将启用Spring Security的@Secured注释。
    @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);
    }
    
    • 以上配置标明readAccount,findAccounts方法可匿名访问,底层使用WebExpressionVoter投票器,可从AffirmativeBased第23行代码跟踪。
    • post方法需要有TELLER角色才能访问,底层使用RoleVoter投票器。
    • 使用如下代码可启用prePost注解的支持
    @EnableGlobalMethodSecurity(prePostEnabled = true)
    public class MethodSecurityConfig {
    //...
    }
    
    • 相应java代码如下:
    public interface BankService {
        @PreAuthorize("isAnonymous()")
        public Account readAccount(Long id);
        @PreAuthorize("isAnonymous()")
        public Account[] findAccounts();
        @PreAuthorize("hasAuthority('p_transfer') and hasAuthority('p_read_account')")
        public Account post (Account account, double amount);
    }
    
    • 以上配置标明readAccount,findAccounts方法可匿名访问,post需要方法需要同时拥有p_transfer和p_read_account权限才能访问,底层使用WebExpressionVoter投票器,可从AffirmativeBased第23行代码其跟踪。

    相关文章

      网友评论

        本文标题:22.Spring Security应用详解-授权-方法授权

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