2011-05-25 77 views
1

如果login.jsp的職位,以/login/submit如何讓Spring Security不繞過控制器登錄映射?

<form action="/login/submit" method="post"> 

applicationContext.xml定義form-login元素:

<form-login login-page="/login" login-processing-url="/login/submit" authentication-failure-url="/login/error" /> 

我如何做一些額外的處理在相應的控制器方法:

@RequestMapping(value = "/login/submit", method = RequestMethod.POST) 

我d定義了這樣的方法,但Spring Security在login.jsp發佈它的表單時從未調用它。相反,它調用loadUserByUsername併成功處理認證,而不使用此控制器方法。

+2

你的最終目標是什麼?在Spring Security中有一些鉤子可用於定製身份驗證生命週期,但您如何以及在何處集成取決於您要實現的內容。 – stevevls 2011-05-25 16:48:48

+0

你還在使用什麼版本的Spring Security? – sourcedelica 2011-05-25 20:55:08

回答

0

我同意@stevels和@ericacm。需要更多的信息才能告訴你什麼是你想要完成的最佳選擇。

從不調用控制器方法,因爲如您所知,spring安全登錄表單身份驗證發生在過濾器中:UsernamePasswordAuthenticationFilter。當表單通過此過濾器成功驗證後,請求會轉發到目標網址。 (或者如果認證失敗,則進入登錄錯誤頁面)。

當您想要修改某些默認的認證行爲時,您很可能會希望從此過濾器開始。不要害怕單步執行代碼!

0

您可以使用稱爲「目標網址」的功能解決此問題。定義強制默認成功目標網址 - 例如/login.submit.result。這將在成功登錄到該特定網址後重定向,您可以通過上下文中的任何控制器映射和控制該網址。當然,這會禁用「target url」的原始意圖。如果您打算使用此解決方案,並且必須在登錄後重定向到頁面,那麼您必須在現有的基礎上(基於變量或內部會話參數)構建額外的「目標URL」層。