2011-01-12 48 views
4

我使用彈簧安全Web認證與彈簧MVC使用自定義驗證和一切都很好,到目前爲止:幾種不同的登錄表單

我問題是:/login加載一個功能齊全的頁面的視圖,但現在我必須提供iframe/popup格式的認證(例如對於認證的小書籤),因此加載不同的視圖(或不同的參數)。

我看到了兩個解決方案,沒有過於複雜的:

  1. 在我/login行動,我有一個辦法(未知對我迄今爲止)來檢索原始請求,並檢查它針對一組網址是使用更簡單的視圖,然後選擇匹配的視圖。 =>我如何檢索這個原始請求?

  2. 我再拍登錄動作/形式,說/login/minimal,這也POST到春季安全網址/j_spring_security_check,但我需要實現請求存儲/檢索機制,使原來的請求被成功登錄後進行。 =>我看到這與SecurityContextPersistenceFilter有關,但我不知道如何實現或調用它。

+0

只是爲了澄清,你想弄清楚如何根據原始請求顯示不同的登錄頁面,或者你問的東西不同嗎? – 2011-01-12 20:40:07

+0

不,你說得對,那是我的解決方案#1,我問了如何去做。 – 2011-01-13 11:04:23

回答

1

如果我正確理解你的問題,你希望改變在原有基礎上請求字符串的登錄頁面。查看this forum post以訪問會話中的原始請求url。它適用於較舊的版本,但您應該可以使用它開始。

編輯我還沒有機會來驗證這一點,但它看起來像關鍵Acegi安全和Spring安全3.看起來你可以從會議中WebAttributes類使用常量訪問之間變化。有效地

//request is a HttpServletRequest object 
SavedRequest savedRequest = (SavedRequest)request.getSession().getAttribute(WebAttributes.SAVED_REQUEST); 
String url = savedRequest.getRequestURL(); 
1

關於第一個問題:

還有一類org.springframework.security.web.authentication.WebAuthenticationDetails

它僅包含客戶端的IP和它的會話,但

它有一個方法

protected void doPopulateAdditionalInformation(HttpServletRequest request) {} 

我相信你可以通過繼承並增加請求url來增強它。 - 但請首先檢查請求是來自登錄表單的請求還是「已阻止」請求。

新增

Chris Thompson posted an other part of the puzzle回答你的問題: 他提到,保存的請求可以從會議獲得的:不是enhanding的WebAuthenticationDetails你

//request is a HttpServletRequest object 
SavedRequest savedRequest = (SavedRequest)request.getSession().getAttribute(WebAttributes.SAVED_REQUEST); 
String url = savedRequest.getRequestURL(); 

所以,你可以結合這一點,只需要閱讀已經包含的會話。

@see Chris Thompson answer

+0

這看起來很有趣,但你如何知道請求是否被阻止? – 2011-01-12 21:17:48