2012-09-06 74 views
0

前跟蹤最後一頁我有一個Web應用程序,其中,如果用戶會話已超時,他們嘗試登錄再次,我需要將其重定向到最後訪問的網頁。只有會話超時,如果用戶註銷我不希望這種映射。Struts2的攔截器會話超時

據我所知,它可以使用一個攔截器和應用範圍的映射來進行。但是,你能給我一個攔截器的代碼示例,更新當前用戶的網址嗎?另外我的應用程序範圍object..how我說5小時後沒有重新登錄刪除引用到該用戶的最後一頁?

回答

1

有關注冊的HttpSessionListener(看看這個answer)什麼。這樣,當會話被銷燬時,您將收到通知,所以這是您可以將有關上次訪問的頁面信息保存到數據庫的最佳時間。

你的會話監聽器應該是這樣的:

package com.rr87; 

import javax.servlet.http.HttpSessionEvent; 
import javax.servlet.http.HttpSessionListener; 

public class YourSessionListener implements HttpSessionListener { 
    @Override 
    public void sessionDestroyed(HttpSessionEvent event) { 
    // Implement logic to save last visited page to database... 
    } 
    . 
    . 
    . 
} 

要註冊您的會話監聽,下面添加到您的的web.xml代碼:一個答案

<web-app ...> 
    <listener> 
      <listener-class>com.rr87.YourSessionListener</listener-class> 
    </listener> 
</web-app> 

而最後一部分。 。您可以在sucesfull註銷時清除數據庫中上次訪問的頁面引用。

[編輯]

從官方文檔,對於會話對象訪問槽HttpSessionEvent

容器創建一個javax.servlet.http.HttpSessionEvent對象 即輸入呼叫HttpSessionListener方法。該 HttpSessionEvent類包括以下方法,你 聽衆可以撥打其中:

HttpSession中的getSession()

使用此方法來檢索已創建或 銷燬會話對象,從中可以獲取的信息,期望。見 「介紹Servlet的會話」有關 的javax.servlet.http.HttpSession接口信息。

基於此我認爲,您仍然可以從「已銷燬」會話中獲取數據。

+0

我如何才能在攔截器中獲取上次訪問的頁面信息? – rr87

+0

將request.getRequestURL()給我當前頁面的url信息? – rr87

+0

你明白我的意思..'YourSessionListener'不攔截,這是聽衆......你應該得到最後訪問內部的對每個請求發射攔截器或Servlet過濾器的URL,並將其存儲到會話檢索它裏面YourSessionListener。 – PrimosK