2011-01-31 141 views
5

我們使用Spring Security來管理身份驗證。我們看到的問題是,當用戶會話在啓動GET表單和點擊執行POST的保存按鈕之間超時時,會將其發送到登錄頁面,但spring會將原始發佈信息保存在會話中。禁用SpringSecurity的SavedRequest存儲邏輯

我們的應用程序在登錄後不會將它們帶回原始URL,而是將它們發送回公共起始頁面。這可以正常工作,但是當用戶恰好返回到他們最初嘗試POST的頁面(表單GET和POST是相同的URL)時,Spring會嘗試自動重新提交POST,這不是我們想要的。

有沒有辦法在Spring中完全禁用SavedRequest存儲邏輯?

+0

如果會話超時,其中保存的要求是從哪裏來的? – sourcedelica 2011-01-31 21:46:04

+0

春天似乎是保存超時前發佈請求的地方,新的?會議仍然得到它。它似乎被AbstractProcessingFilter訪問.SPRING_SECURITY_SAVED_REQUEST_KEY – 2011-01-31 22:36:14

回答

3

我猜this jira春季安全問題描述你的問題以及如何處理這個問題。

0

它看起來像會話固定保護=「newsession的」屬性上(2.0)或(3.0)也將解決這個問題

1

有兩種情況: 1)如果您希望重新登錄後,用戶應始終被轉發到默認的目標URL,而不是原單請求的URL,然後把總是使用默認目標=「真」在你的security.xml像

<http auto-config="true"> 
..... 
<form-login login-page="/login" always-use-default-target="true" default-target-url="/xyz" 
     authentication-failure-url="/login?error=true" login-processing-url="/j_security_check"/> 
</http> 

1)如果您希望在會議重新登錄後超時,用戶應該轉發到原始請求的URL,但你不想重新提交表單,然後把session-fixation-protection =「 newSession「in your security.xml like

<http auto-config="true"> 
<session-management session-fixation-protection="newSession"/> 
..... 
</http> 

請將會話管理標籤作爲http配置的第一行。

0

基於對Raghuram's answer Nathan的評論,與命名空間中的XML這件事情是這樣的:

<security:http> 
    <security:request-cache ref="nullRequestCache" /> 
    <!-- ... --> 
</security:http> 

<bean id="nullRequestCache" class="org.springframework.security.web.savedrequest.NullRequestCache" />