我有一個我的web應用程序的一部分,它是一個RESTfull api,並且是更標準的web頁面的一部分。Spring Security多個filterChainProxy映射/過濾器,自定義過濾器Json輸出
我希望有一些自定義過濾器,如入口點,SuccessHandler和FailureHandler剩餘部分。這部分位於/ rest/**映射中。
在另一方面,其他的一切都需要有更多的共同的過濾器和映射與/ **。
的問題是要找到一種簡單的方法有不同的對應過濾器定義的FilterChainProxy。
眼下這個解決方案不起作用:
<!-- Normal web app -->
<http auto-config="true" use-expressions="true" authentication-manager-ref="authenticationManager">
<form-login/>
<logout/>
<intercept-url pattern="/**" access="hasRole('ROLE_USER')" />
</http>
<!-- Configure RESTfull services -->
<http use-expressions="true" authentication-manager-ref="authenticationManager" entry-point-ref="restAuthenticationEntryPoint" >
<form-login authentication-success-handler-ref="restAuthenticationSuccessHandler" login-page="/rest/login" username-parameter="username" password-parameter="password" />
<logout logout-url="/rest/logout" />
<intercept-url pattern="/rest/**" method="GET" access="hasRole('ROLE_USER')" />
<intercept-url pattern="/rest/**" method="POST" access="hasRole('ROLE_ADMIN')" />
<intercept-url pattern="/rest/**" method="PUT" access="hasRole('ROLE_ADMIN')" />
<intercept-url pattern="/rest/**" method="DELETE" access="hasRole('ROLE_ADMIN')" />
</http>
它抱怨附:univseral比賽是先於其他模式。
有沒有一種方法來定義這樣的事情,而不訴諸與定義界定的FilterChainProxy? http版本的確幫助了很多,以減少配置的數量,因爲我將不得不手動設置一個UsernamePasswordAuthenticationFilter等。
下一個問題更簡單:我必須在使用表單登錄身份驗證JSON對象。
到目前爲止,我已經實現了SuccessHandler(實際上是一個版本SimpleUrlAuthenticationSuccessHandler沒有重定向的部分)。
如何編寫我的JSON輸出?
我必須有這樣的事情:
HTTP 200 OK
有:
{"success":true,"customer {"email":"[email protected]","session_id":"b83a41dfaca6785399f00837888886e646ff9088"}}
,並與FailureHandler類似的事情。它一定很簡單,它肯定是一些非常基本的東西,但你怎麼做?重定向到自定義控制器不是解決方案,因爲我將擁有301重定向狀態,這是一個非常簡單的REST客戶端可能無法理解的狀態。
至少,我希望只有http頭和沒有身體。
謝謝!
將2個driffrent接口(WWW和REST)放在一個ApplicationContext中的原因是什麼?兩者之間是否有一些背景/會話共享?是否登錄到WWW也意味着登錄到REST?如果是這樣,那麼爲什麼分開登錄操作?如果不是,那爲什麼把它們放在一起?難道這些不是單獨的應用程序爲單個底層服務層提供不同的接口嗎? – Roadrunner 2011-12-29 19:50:46
這就像在正常的Web應用程序內部有一個REST部分。我不想要另一個身份驗證過程,我只想要其他過濾器。 REST部分只是在沒有身份驗證時顯示錯誤,但另一方面,在網頁上我必須將用戶重定向到登錄頁面。 – adreide 2011-12-30 07:35:50