2011-11-04 74 views
2

可能重複:
Prevent user from going back to the previous secured page after logout無效會話 - Servlet的

我想知道如何在JSP和servlet無效會話。在我的網站上,當一個人登出時登錄登錄頁面,但點擊返回按鈕時,他可以訪問上一頁。我無法理解在哪裏把session.invalidate()

並進一步在那裏,當一個人退出打我應該使它無效,在login.jsp的或我的其他網頁。

我的過濾器類: -

import java.io.IOException; 

import javax.servlet.Filter; 
import javax.servlet.FilterChain; 
import javax.servlet.FilterConfig; 
import javax.servlet.ServletException; 
import javax.servlet.ServletRequest; 
import javax.servlet.ServletResponse; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.servlet.http.HttpSession; 

import javax.servlet.annotation.WebFilter; 


public class LoginFilter implements Filter{ 


     @Override 
     public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { 
      HttpServletRequest request = (HttpServletRequest) req; 
      HttpServletResponse response = (HttpServletResponse) res; 




      HttpSession session = request.getSession(false); 

      if (session == null || session.getAttribute("currentSessionUser") == null) { 
       response.sendRedirect("Loginpage.jsp"); // No logged-in user found, so redirect to login page. 

       response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1. 
       response.setHeader("Pragma", "no-cache"); // HTTP 1.0. 
       response.setDateHeader("Expires", 0); 
      } else { 
       chain.doFilter(req, res); // Logged-in user found, so just continue request. 
      } 
     } 

} 

在web.xml中我已經寫了: -

<filter> 
     <filter-name>loginFilter</filter-name> 
     <filter-class>LoginFilter</filter-class> 
    </filter> 
    <filter-mapping> 
     <filter-name>loginFilter</filter-name> 
     <url-pattern>/ARMS/*</url-pattern> 
    </filter-mapping> 

在我Loginpage.jsp我剛剛寫

<% 
session.invalidate(); 
%> 

好嗎?其次,我不清楚目錄結構。我把它的屏幕截圖.. enter image description hereenter image description here

我使用的Apache Tomcat 5.5服務器,所以我想我不應該把url-pattern的註釋濾波器類吧?因爲它只支持tomcat 7及以上版本。

+0

超出無效時登錄會話('session.invalidate()')? –

+0

@BheshGurung - 我在登錄頁面寫了session.invalidate。這是錯的嗎? 「註銷」是登錄頁面的超鏈接 – Dhruv

+0

看起來當用戶點擊「註銷」鏈接時,您正在重定向到登錄頁面,並且在該頁面中,您首先使會話無效並呈現登錄表單。如果是這種情況,那麼你的代碼沒有問題。問題在於您的頁面正在被瀏覽器緩存,當用戶單擊後退按鈕時,瀏覽器會顯示該頁面。要處理這個問題,請按照第一條評論中BalusC的鏈接發佈。 –

回答

0

我使用servlet日誌出局的唯一目的。當用戶點擊註銷按鈕,它引導他們到該頁面,這反過來又檢查活動的會話,如果它發現一個,來電session.invalidate(),然後將用戶重定向回主頁(或任何你想)。

HttpSession session = request.getSession(false); 

if(session != null){ 
    session.invalidate(); 
    RequestDispatcher rd = request.getRequestDispatcher("Loginpage.jsp"); 
    rd.forward(request, response); 
} else { 
    //There is no session. Redirect somewhere 
} 

這只是一個簡單的例子。

+1

這是用戶點擊「註銷」,但不是瀏覽器的後退按鈕,糾正我,如果我錯了。謝謝 – Dhruv