• 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>
  • 相关阅读:
    《不生不熟》读后感 读书笔记
    《亚洲与一战》读后感 读书笔记
    《厨房》读后感 读书笔记
    《娇惯的心灵》读后感 读书笔记
    《实践理性批判》读后感 读书笔记
    嵌入式三级知识点整理
    C语言:输入一个数,输出比这个数小的所有素数,并求出个数。
    C语言知识点记录
    C语言-实现矩阵的转置-随机函数产生随机数并赋予数组中-190222
    将数字字符转为数字的两种方法。
  • 原文地址:https://www.cnblogs.com/modou/p/10488376.html
Copyright © 2020-2023  润新知