常见用法是:
<intercept-url pattern="/**" access"ROLE_ADMIN" />
是否可以执行以下操作:
<intercept-url pattern="/**" access"hasPermission("addSomething1") />
我没有在允许的下列出的安全表达式中看到hasPermission:
我们只有:
认证; denyAll; hasAnyRole(角色列表); hasIpAddress; isAnonymous()等。
我只是猜测方法安全性是否允许“hasPermission”,那么它也应该也适用于Web请求。
谢谢,
答案 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安全表达式根目录。