解決用戶註銷後,依然可以在註銷前頁面的問題(javaweb)

今天在做項目的時候,按道理一個用戶點擊了註銷,並在相關的servlet中清除了關於此用戶的session。此重定向回了登錄頁面。並在過濾器中進行了設置。

//過濾器代碼
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		HttpServletRequest req = (HttpServletRequest)request;
		HttpServletResponse resp = (HttpServletResponse)response;
		User user =(User) req.getSession().getAttribute(Constants.USER_SESSION);
		if(user == null) {
			resp.sendRedirect(req.getContextPath()+"/index.jsp");
		}else {
			// pass the request along the filter chain
			chain.doFilter(request, response);
		}
		
	}

設置完之後,在用戶退出登錄頁面,在輸入用戶的主頁地址,的確可以起到攔截的作用。但是,奇怪的是,當我們點擊瀏覽器返回上一頁的時候,竟然可以訪問到該用戶註銷前的頁面。這在現實生活中明顯是不合法的。因此我剛開始會以爲是過濾器失效了,但是在相關地方後進行輸出參數的測試,發現相關的過濾器和servlet並未失效。這就說明了,瀏覽器的返回上一步,並不是真正的進行了網絡請求服務,這就導致了並沒有經過過濾器。
在網上搜查了一波才發現,瀏覽器是有緩存的呀。剛剛返回上一步之所以沒有經過過濾器是因爲讀取的是緩存。竟然這樣的話,我們就可以通過response.setHeader()的方法,給瀏覽器一個響應,不讓瀏覽器緩存。
更改後過濾器的代碼:

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		HttpServletRequest req = (HttpServletRequest)request;
		HttpServletResponse resp = (HttpServletResponse)response;
		//禁止瀏覽器緩存
		resp.setHeader("pragma", "no-cache");
		resp.setHeader("Cache-Control", "no-cache");
		resp.setDateHeader("Expires", 0);
		resp.setHeader("Cache-Control", "no-store");
		User user =(User) req.getSession().getAttribute(Constants.USER_SESSION);
		if(user == null) {
			resp.sendRedirect(req.getContextPath()+"/index.jsp");
		}else {
			// pass the request along the filter chain
			chain.doFilter(request, response);
		}
		
	}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章