【问题标题】:Spring security - securing method request with hasPermissionSpring security - 使用 hasPermission 保护方法请求
【发布时间】:2013-06-25 20:02:40
【问题描述】:

常见的用法是:

<intercept-url pattern="/**" access"ROLE_ADMIN" />

是否可以这样做:

<intercept-url pattern="/**" access"hasPermission("addSomething1") /> 

我没有在 allowed 下列出的安全表达式中看到 hasPermission:

我们只有:

身份验证;全部拒绝; hasAnyRole(角色列表);有IP地址; isAnonymous() 等。

我只是猜测是否允许“hasPermission”用于方法安全,那么它也应该用于网络请求。

谢谢,

【问题讨论】:

    标签: spring security


    【解决方案1】:

    是的,这是可能的。您只需要切换到基于表达式的评估

     <security:http use-expressions="true">
    

    并将PermissionEvaluator 提供给您的表达式处理程序:

    <security:expression-hanlder ref="webSecurityExpressionHandler" />
    
    <bean id="webSecurityExpressionHandler" class="org.springframework.security.web.access.expression.DefaultWebSecurityExpressionHandler>
        <property name="permissionEvaluator" ref="aclPermissionEvaluator" />
    </bean>
    

    当然你需要有PermissionEvaluator 实现。您可以自己编写,也可以使用spring-acl 项目。

    【讨论】:

    • 在这个问题stackoverflow.com/questions/8321696/… 上查看我的回答,它描述了如何使用其他表达式扩展 Web 安全表达式根。
    • @Aubergine:我只是想展示在哪里搜索实现了哪些方法。 Sp OP 希望能更好地了解背景。
    【解决方案2】:

    Pavel Horal 已经描述了如何在 intercept-url 标签中启用表达式(顺便说一句。启用后,所有访问属性都必须写为 SpEl 表达式!)

    但是您需要知道一件事:intercept-url 标记可用的表达式与基于方法的安全 SpEl 表达式(如 @PreAuthorize)可用的表达式不同。这是因为第一个是在WebSecurityExpressoonRoot 中实现的,而其他的是在MethodSecurityExpressionRoot 中实现的。

    请参阅我在这个问题 stackoverflow.com/questions/8321696/... 上的回答,它描述了如何使用其他表达式扩展 Web 安全表达式根。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-02
      • 2020-08-03
      • 2018-02-03
      • 2017-10-30
      • 2014-07-29
      • 2022-12-11
      • 2014-06-26
      • 2014-02-21
      相关资源
      最近更新 更多