我正在用一些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