zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    Access, SQL Server, and Oracle数据类型的对应关系
    [转]SQL Server 2005 从差异备份还原数据库
    疲惫
    关于在cmd命令里的路径包含空格的问题
    导Excel时的科学计数法问题
    [转]SQL SERVER 2005 备份与恢复简介
    [转]用C#创建Windows Service
    [转] vb.net option
    [转]sql server profiler only TrueType fonts are supported. this is not a truetype font
    进程、线程、协程之概念理解[转帖]
  • 原文地址:https://www.cnblogs.com/modou/p/10488376.html
Copyright © 2011-2022 走看看