Spring Security sec:使用Java配置授权标记
我目前正在开发一个用例,在这个用例中,我需要使用下面的Spring安全标记库来显示(或不显示)基于用户权限的链接Spring Security sec:使用Java配置授权标记,java,spring,spring-mvc,spring-security,Java,Spring,Spring Mvc,Spring Security,我目前正在开发一个用例,在这个用例中,我需要使用下面的Spring安全标记库来显示(或不显示)基于用户权限的链接 <spring:url var="createUserURL" value="/security/user/create" /> <sec:authorize url="${createUserURL}"> <a href="${createUserURL}"> <spring:message cod
<spring:url var="createUserURL" value="/security/user/create" />
<sec:authorize url="${createUserURL}">
<a href="${createUserURL}">
<spring:message code="button.createUser" />
</a>
</sec:authorize>
…但是,它需要一个FilterSecurityInterceptor实例,我已经在日志中看到了它。事实上,它已经是我的过滤链的一部分,所以我想知道如何在上面的defaultwebinvocationprivilegeeevaluator
构造函数中引用它
弹簧安全3.2.4.1版本参考:
谢谢要获得
过滤器安全Interceptor的实例
只需向@Bean
-注释的方法添加一个参数,spring就会发挥神奇的作用(它会找到匹配的Bean并将其作为参数传递给该方法):
但这并不能解决您的问题。当使用java配置时,spring自动创建WebInvocationPrivilegeEvaluator
bean,因此不需要手动创建它。事实上,如果上下文中没有webinvocationprivilegeeevaluator
bean,sec:authorize
标记就会抛出一个
我相信您的问题是由于不正确使用url
属性造成的。它的值应该是一个内部url,如/security/user/create
,但您使用的是
标记的结果,该标记将上下文路径附加到该url(如/context/security/user/create
)
另一种可能是,您没有将spring security配置为真正保护
/security/user/create
url,但我认为这里不是这样。您可以向我们展示您为保护您的url而做的安全配置吗URLs@SangramJadhav:简单地说:@PreAuthorize(“hasRole('ADMINISTRATOR'))
在控制器方法上。当我尝试通过单击按钮/链接访问此方法时,它会起作用。通过工作,我的意思是,我得到了预期的HTTP 403错误,因为我不应该访问该功能。只是测试了它,即使我像你建议的那样硬编码URL,它也不起作用。有趣的是,当我真的点击那个链接时,我得到了一个HTTP403(这是正确的),然后是时候进行一些调试了。您可以共享您的项目或创建一个吗?很遗憾,我无法共享该项目,因为它包含敏感数据和BI。我可以提供调试日志,但我看到的是投票者总是返回1
。也许您至少可以显示所有相关配置(webapp+spring+spring security),包括包含@PreAuthorize
注释的控制器框架?
<sec:authorize url="${createUserURL}">
@Bean
public WebInvocationPrivilegeEvaluator webInvocationPrivilegeEvaluator() {
return new DefaultWebInvocationPrivilegeEvaluator();
}
@Bean
public WebInvocationPrivilegeEvaluator webInvocationPrivilegeEvaluator(FilterSecurityInterceptor filterSecurityInterceptor) {
return new DefaultWebInvocationPrivilegeEvaluator(filterSecurityInterceptor);
}