我正在用一些RESTfull资源作为API制作Spring MVC Web应用程序。SpringSecurity多个名称空间和安全注释。非常混乱
我需要的问题的REST部分有一些自定义过滤器,因为我不希望有任何重定向,我想任何异常与相应的HTTP错误代码和一个基本的JSON说明翻译做。
在另一方面,网站的其他部分必须是较常见的和重定向人时没有登录的情况等
还有一两件事,我想用@Secured批注和后在某些情况下的认证。
我如何正确定义(春3.1)的多个HTTP命名空间?
这里是我的错误配置:
<global-method-security secured-annotations="enabled" />
<http pattern="/rest/**" authentication-manager-ref="authenticationManager" entry-point-ref="restAuthenticationEntryPoint">
<form-login login-page="/rest/login" login-processing-url="/rest/postlogin"
authentication-success-handler-ref="restAuthenticationSuccessHandler"
authentication-failure-handler-ref="restAuthenticationFailureHandler"
username-parameter="username" password-parameter="password" />
<logout logout-url="/rest/logout" invalidate-session="true" />
</http>
<http pattern="/**" authentication-manager-ref="authenticationManager">
<form-login login-page="/login" login-processing-url="/postlogin"
username-parameter="username" password-parameter="password" />
<logout />
</http>
有趣的是,这种配置工作的一部分,我可以用/ REST /登录密码,我从我的自定义成功处理程序的响应。我也可以登录/登录,我得到适当的重定向到/。注销也很好。
接着,所有控制器豆已在安全方法@Secured( “ROLE_USER”)。但是所有的安全方法都不能得到保证。这是为什么呢?
@Secured({"ROLE_USER"})
@RequestMapping(method = RequestMethod.GET, headers = { "Range" })
public @ResponseBody
HttpEntity<List<T>> list(@RequestHeader("Range") String range) {
我已经阅读过文件,我比以前更困惑。
- 为什么我的方法不被固定?
- 必须在HTTP命名空间定义的访问,以便@Secured注释工作?
- http命名空间是否覆盖我的@Secured注释?如果是这样,我怎样才能定义多个“登录页面”与自定义过滤器,并能够使用注释?
这里有一些事实: *我使用Spring和SpringSecurity 3.1 *我有一个自定义的AuthenticationManager检索从休眠的daos用户详细信息。 *有些控制器正在扩展@Secured注释所在的抽象类。但它仍然不适用于简单的控制器。 *我的控制器是通过上下文发现的:component-scan和base-package。 *安全性可以在一个http命名空间下正常工作。
请帮助,我惹毛了这个!
非常感谢!问题在于调度程序servlet上下文和主要上下文是不同的,因此安全注释没有在必要的地方启用。现在我已经在我的servlet上下文中添加了全局安全注释,并且一切正常!这里是[Faq](http://static.springsource.org/spring-security/site/faq/faq.html#faq-method-security-in-web-context)。 – adreide 2012-01-10 07:18:16