Spring安全性 - 使用hasPermission保护方法请求

时间:2013-06-28 05:53:24

标签: spring security

常见用法是:

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

是否可以执行以下操作:

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

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

我们只有:

认证; denyAll; hasAnyRole(角色列表); hasIpAddress; isAnonymous()等。

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

谢谢,

2 个答案:

答案 0 :(得分: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项目。

答案 1 :(得分:2)

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

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

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