jsp中添加过滤器,实现校验用户身份

我现在需要实现一个功能,就是用户登录前不允许访问系统,我使用的是jsp的过滤器来实现的。

先把filter过滤器的代码粘出来:

 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行

这里是实现了一个通用的过滤器,对所有的请求都会用这个过滤器进行过滤,这就出现了一个问题,会把不需要过滤的页面也进行过滤,这时就需要排除不需要过滤的请求,我这里是把登录请求login进行了排除

校验用户身份是检查session是否存在,如果不存在,就认为用户身份不合法,这时候就请求转发到error.js页面,给出错误的提示

注意第33行,这里添加了一个return,停止后面代码的执行,不然请求转发后,后面还有代码需要执行,会导致报错:Cannot forward after response has been committed

下面我再把error.jsp的代码贴出来:

<%@ 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>
原文地址:https://www.cnblogs.com/modou/p/10488376.html