我如今須要實現一個功能,就是用戶登陸前不容許訪問系統,我使用的是jsp的過濾器來實現的。html
先把filter過濾器的代碼粘出來:java
1 package com.day8.filter; 2 3 import java.io.IOException; 4 5 import javax.servlet.Filter; 6 import javax.servlet.FilterChain; 7 import javax.servlet.FilterConfig; 8 import javax.servlet.ServletException; 9 import javax.servlet.ServletRequest; 10 import javax.servlet.ServletResponse; 11 import javax.servlet.annotation.WebFilter; 12 import javax.servlet.http.HttpServletRequest; 13 import javax.servlet.http.HttpSession; 14 15 @WebFilter("/*") 16 public class CheckFilter implements Filter { 17 18 public CheckFilter() { 19 } 20 21 public void destroy() { 22 } 23 24 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 25 HttpServletRequest req = (HttpServletRequest)request; 26 27 if(!req.getServletPath().equals("/login")) { 28 HttpSession session = req.getSession(); 29 String managername = (String)session.getAttribute("username"); 30 if(managername==null) { 31 req.setAttribute("msg", "沒有權限"); 32 req.getRequestDispatcher("error.jsp").forward(request, response); 33 return; 34 } 35 } 36 37 chain.doFilter(request, response); 38 } 39 40 public void init(FilterConfig fConfig) throws ServletException { 41 } 42 43 }
主要代碼在第24-第38行session
這裏是實現了一個通用的過濾器,對全部的請求都會用這個過濾器進行過濾,這就出現了一個問題,會把不須要過濾的頁面也進行過濾,這時就須要排除不須要過濾的請求,我這裏是把登陸請求login進行了排除jsp
校驗用戶身份是檢查session是否存在,若是不存在,就認爲用戶身份不合法,這時候就請求轉發到error.js頁面,給出錯誤的提示spa
注意第33行,這裏添加了一個return,中止後面代碼的執行,否則請求轉發後,後面還有代碼須要執行,會致使報錯:Cannot forward after response has been committedcode
下面我再把error.jsp的代碼貼出來:htm
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> ${error } <a href="login">返回</a> </body> </html>