我想基于自定义url参数(路径变量)创建安全规则。
举个例子。假设我希望用户拥有对名为Brand1和Brand2的资源的管理员访问权限,但对名为Brand3的资源无访问权限的用户。我们可能会使用以下链接来编辑资源。
http://myapp/brand/edit/1
http://myapp/brand/edit/2
http://myapp/brand/edit/3
现在在安全的背景下,我想做这样的事情
<security:intercept-url pattern="/brand/edit/{brandId}"
access="hasRole('ROLE_ADMIN') or
@authorizationService.hasBrandPermission(
#brandId, principal.username)"/>
我唯一得到的是用户名。 BrandId始终为null。
我曾经使用@PreAuthorize做到这一点,但它确实有效,但现在我想将安全性配置集中在单个xml文件中,而不是将其分散在所有 Controller 类中。而且,当我使用@PreAuthorize时,我的access-denied-handler并没有将我重定向到拒绝页面,而是显示了丑陋的AccessDeniedException insead。
我真的很喜欢任何想法。
最佳答案
将pom.xml
中的Spring Security版本更改为4.1.0.RELEASE
:
<spring-security.version>4.1.0.RELEASE</spring-security.version>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>${spring-security.version}</version>
</dependency>
之后,您可能需要清理您的Maven项目。
(我知道,这是一个老问题。不过,三年后我也遇到了同样的问题)。