2011-05-25 117 views
5

我已經得到了使用彈簧安全的web應用程序之後。我想在用戶退出登錄前將用戶重定向到他們所在的頁面。春季安全:重定向到URL以前註銷

是否有一個簡單的方法來做到這一點?

+0

你肯定也想這樣?用戶訪問某個安全頁面時,是否希望在註銷後允許他在該安全頁面上訪問? – 2011-05-25 06:15:41

+0

@Vijay可能是因爲來賓 – 2011-05-25 06:17:34

+1

主要是我想他們被送回登錄屏幕。登錄頁面將它們發送到最初請求的頁面,一旦它們已經成功登錄,我希望這是他們註銷的地方。 – 2011-05-27 04:04:33

回答

1

您可以添加彈簧安全濾波器鏈中的新濾波器。該新文件將應用於/logout網址。通過此過濾器時,您可以將當前頁面保存在字段變量中。當通過過濾器返回時。您可以將請求重定向到保存的URL。我認爲這可以提供幫助。您可以通過使用獲取當前頁面的URL。 Referer標題在Request對象中。

0

只是一個想法:

我們如何保持一堆訪問過的頁面。可能最多3個條目。並從註銷重定向用戶。

  • 配置過濾器或擴展春季安全過濾器,以保持會話的堆棧約最後兩個訪問的網址

  • 在註銷配置servlet作爲logout-success-url

  • 現在得到會話棧的URL和現在無效會話並重定向用戶到該頁面

您也可以利用referrer header作爲維傑提到

7

不確定這個問題是指哪個Spring版本 - 但自Spring 3.0以來,標準org.springframework.security.web.authentication.logout.SimpleUrlLogoutSuccessHandler上有一個useReferer屬性。

因此,所有你需要做的就是配置它這樣和註銷將重定向到任何地方的用戶來自何處:

<bean id="logoutSuccessHandler" class="org.springframework.security.web.authentication.logout.SimpleUrlLogoutSuccessHandler"> 
    <property name="useReferer" value="true"/> 
</bean> 

<security:http> 
    <security:logout logout-url="/logout" success-handler-ref="logoutSuccessHandler" /> 
</security:http> 
+0

我用這個,它工作正常。但是,當我從受保護的頁面註銷它去登錄表單...在這種情況下有什麼辦法去不同的URL? (即主頁) – Mat 2012-07-12 12:53:58

+0

我不認爲這是可能的標準SimpleUrlLogoutSuccessHandler。您可以擴展它並覆蓋'determineTargetUrl(HttpServletRequest請求,HttpServletResponse響應)'方法來實現自定義行爲。但是你需要知道,如果網址(由'super.determineTargetUrl(請求,響應)來確定;')這是被重定向到被保護。我沒有找到一個方法來做到這一點不是檢查targetUrl這個字符串其他那裏。 – meyertee 2012-07-14 09:04:37

0

你需要的是一個簡單的LogoutSuccessHandler

@Component 
    public class CustomLogoutSuccessHandler extends 
    SimpleUrlLogoutSuccessHandler implements LogoutSuccessHandler { 

@Override 
public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse 
    response, Authentication authentication) 
     throws IOException, ServletException { 
    if (authentication != null) { 
     System.out.println(authentication.getName()); 
    } 
    response.setStatus(HttpStatus.OK.value()); 
    response.sendRedirect(request.getHeader("referer")); 
} 

後來在您的配置方法中調用它,例如

.logout().logoutSuccessHandler(customLogoutSuccessHandler) 

這會將您重定向到引用URL。