0

常见的用法是:

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

是否可以执行以下操作:

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

我还没有看到允许下列出的安全表达式中的 hasPermission:

我们只有:

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

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

谢谢,

4

2 回答 2

5

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

 <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项目。

于 2013-06-28T06:16:11.187 回答
2

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

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

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

于 2013-06-28T06:55:45.807 回答