【发布时间】:2016-09-24 19:07:17
【问题描述】:
我目前正在开发一个用例,我需要使用以下 Spring Security 标签库来显示(或不显示)基于用户权限的链接。
<spring:url var="createUserURL" value="/security/user/create" />
<sec:authorize url="${createUserURL}">
<a href="${createUserURL}">
<spring:message code="button.createUser" />
</a>
</sec:authorize>
查看日志时,我发现没有任何反应
<sec:authorize url="${createUserURL}">
无论我的角色如何,我总是能看到按钮。当我使用 hasRole 时,它可以工作,所以我肯定缺少 <sec:authorize url="..." /> 工作的东西。
在阅读 Spring Security 参考的以下部分时:
要使用这个标签,还必须有一个实例
WebInvocationPrivilegeEvaluator在您的应用程序上下文中。如果你 正在使用命名空间,会自动注册一个。
...问题是该参考不包括 Java Config。所以我想我只需要在我的 SecurityConfig 类中定义一个@Bean,就像这样:
@Bean
public WebInvocationPrivilegeEvaluator webInvocationPrivilegeEvaluator() {
return new DefaultWebInvocationPrivilegeEvaluator();
}
...但是,它需要一个 FilterSecurityInterceptor 的实例,我已经在我的日志中看到了它。事实上,它已经是我过滤器链的一部分,所以我想知道如何在上面的 DefaultWebInvocationPrivilegeEvaluator 构造函数中引用它?
Spring Security 3.2.4.RELEASE 参考: http://docs.spring.io/spring-security/site/docs/3.2.4.RELEASE/reference/htmlsingle/#the-authorize-tag
谢谢
【问题讨论】:
-
您能否向我们展示您为保护 URL 所做的安全配置
-
@SangramJadhav:就这么简单:
@PreAuthorize("hasRole('ADMINISTRATOR')")在控制器方法上。当我尝试通过单击按钮/链接访问此方法时,它可以工作。通过工作,我的意思是我收到了预期的 HTTP 403 错误,因为我不应该访问该功能。
标签: java spring spring-mvc spring-security