2012-03-27 39 views
2

我有一個體面的登錄系統與Spring 3安全性一起工作。如何在Spring安全中需要登錄時向會話添加消息?

如果用戶試圖訪問登陸前安全網頁,他彈到登錄頁面,然後成功登錄後,他被重定向回,他試圖先前訪問的頁面。這幾乎就是我想要的。

我也希望是出現解釋到,他已經被重定向那裏,因爲他曾試圖訪問一個安全的區域,用戶在登錄頁上一個特殊的錯誤消息。我如何做到這一點(沒有在登錄頁面上顯示以前沒有嘗試訪問安全頁面的人的錯誤消息)?

謝謝!

P.S.我已閱讀http://static.springsource.org/spring-security/site/docs/3.0.x/reference/springsecurity-single.html#getting-started以及本網站和其他人的許多帖子,但尚未找到解決方案。

回答

0

您使用的JSP?然後像this這樣的東西可能會有用。
您想要自定義Spring Security的錯誤消息嗎?看看here

+0

你的回答很可能會工作,但我早些時候指出認證失敗,網址,增加了一個錯誤信息給會話的具體方法解決了這個問題: ' <形式登錄登錄頁=「/登錄/到期」 ... 認證失敗-URL = 「/登錄/失敗」 ... /> ... ' 和的LoginController: '@RequestMapping(方法= RequestMethod.GET) public String fail(HttpSessio n會話){ flashMessageHelper.addError(MessageKey.SIGN_IN_FAILURE,session); return PathHelper.getRedirectToPath(linkHelper.getHome()); }' – Ryan 2012-03-28 18:34:33

0

在您的登錄jsp頁面上,您可以檢索HTTP標頭引用者(例如jstl - ${header['referer']}),它會告訴您用戶在重定向到此登錄頁面之前嘗試訪問的頁面。

0

在登錄頁面是什麼由Spring authomaticaly做顯示錯誤消息。你可以看到如何討論here。我認爲這更多的是將登錄錯誤顯示爲「Bad credentials」,但無論如何要記住。

對於你的情況,顯示與存取關聯的錯誤信息被拒絕可以做到只定義在春季安全配置的拒絕訪問頁面。

通常情況下,你可以看到這樣的事情:

<http auto-config="true" access-denied-page="/403.jsp"> 
.... 
</http> 

,但你也可以做到這一點,控制在登錄JSP如果myError變量來在請求:

<http auto-config="true" access-denied-page="/login.jsp?myError=access-denied"> 
.... 
</http> 
0

我不不要以爲這裏的任何答案都能爲原始問題提供一個簡潔的通用解決方案。我不明白OP的解決方案,這可能是他的具體情況。

當用戶點擊一個安全的網址,春天將用戶重定向到登錄頁面。原始請求存儲在會話中。並且spring不會將原始請求中的任何參數傳遞給登錄頁面。

您可以添加類似下面的東西的login.jsp:

<% 
     if((SavedRequest)session.getAttribute("SPRING_SECURITY_SAVED_REQUEST") != null && ((SavedRequest)session.getAttribute("SPRING_SECURITY_SAVED_REQUEST")).getParameterMap().get("LOGINMSG") != null){ 
    out.println('<%= ((SavedRequest)session.getAttribute("SPRING_SECURITY_SAVED_REQUEST")).getParameterMap().get("LOGINMSG")[0]%>');  
     } 
     %> 

哪裏LOGINMSG是你附加到原始安全URL自定義最終用戶的登錄信息。

希望的春天安全團隊會附和和驗證(或無效)這一方法。

+0

嗨Prashant。我試圖讓這個確切的解決方案工作。我的問題是如何讓Spring調用將代碼中的LOGINMSG放入jsp中的java代碼。我確定它是某種過濾器,但它不是一個認證過濾器。我如何配置Spring來調用我的Java代碼位,將額外的信息放在登錄頁面的會話中? – Jake 2013-10-25 23:18:22

相關問題