【问题标题】:Secured annotations in spring securitySpring Security 中的安全注解
【发布时间】:2012-03-03 11:23:32
【问题描述】:

我正在尝试在 Spring Security 中配置安全注释。但我有一个关于这个的问题-

....
<security:http auto-config="true" use-expressions="true">
....

当我使用时

@Secured("CUSTOM_ACCESS")
public String query();

它不起作用。但是我用

@PreAuthorize("hasRole('CUSTOM_ACCESS')")
public String query();

它可以正常工作并应用相关角色。这是否意味着@Secured 注解不适用于@PreAuthorize?

我也试过添加

   <security:global-method-security secured-annotations="enabled" />

但这并没有帮助。

   <security:global-method-security pre-post-annotations="enabled" />

上述配置工作正常。有什么想法吗?

【问题讨论】:

    标签: spring spring-security


    【解决方案1】:

    首先,&lt;http&gt; 元素中的 use-expressions 设置对方法安全注释没有影响。这些是使用global-method-security 启用的。

    使用

       <security:global-method-security pre-post-annotations="enabled" />
    

    将启用PreAuthorize 及其相关注释。当您启用安全注释时,安全注释不起作用的原因是没有选民知道CUSTOM_ACCESS 的含义。在其默认设置中,Spring Security 的 RoleVoter 仅使用以前缀 ROLE_ 开头的属性。请参阅this FAQ 了解更多信息。

    选民可以用于检查简单角色以外的其他事情,因此他们通常需要某种方式来确定为方法配置的哪些属性适用于他们。基于表达式的注释操作与标准选民不同。 hasRole 表达式只是查找分配给用户的命名权限。

    因此,如果您为方法安全创建了一个AccessDecisionManager,并使用了一个使用您的CUSTOM_ACCESS 属性的AccessDecisionVoter,那么@Secured 注释就会产生效果。但是,既然您已经使用 PostAuthorize,您可能只想坚持使用它。

    【讨论】:

    • 我可以两个都这样吗..&lt;sec:global-method-security secured-annotations="enabled" pre-post-annotations="enabled" proxy-target-class="true"/&gt;
    猜你喜欢
    • 1970-01-01
    • 2016-05-18
    • 1970-01-01
    • 2011-07-21
    • 2015-03-18
    • 1970-01-01
    • 2014-02-05
    • 1970-01-01
    • 2016-12-27
    相关资源
    最近更新 更多