filter 权限拦截实现


27.Filter实现权限拦截

image-20211202175207924

登录页面login.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title



错误页面error.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title



失败

没有权限,用户输入有误

返回登录页面

登录接口LoginServlet

import com.zhang.utils.Constant;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;


public class LoginServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String userName = req.getParameter("username");
        if ("admin".equals(userName)) {
            //登录成功
            req.getSession().setAttribute(Constant.USER_SESSION, req.getSession().getId());
            //跳转
            resp.sendRedirect("/sys/success.jsp");
        } else {
            //登录失败
            resp.sendRedirect("/error.jsp");

        }

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

注销页面LogoutServlet

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;


public class LogoutServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        Object userSession = req.getSession().getAttribute(Constant.USER_SESSION);
        if (userSession != null) {
            req.getSession().removeAttribute(Constant.USER_SESSION);
            //跳转到登录页面
            resp.sendRedirect("/login.jsp");
        } else {
            //跳转到登录页面
            resp.sendRedirect("/login.jsp");
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

常量类Constant

public class Constant {

    public static final String USER_SESSION = "USER_SESSION";
}

过滤器LoginFilter

import com.zhang.utils.Constant;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;


public class LoginFilter implements Filter {
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) request;
        HttpServletResponse rep = (HttpServletResponse) response;
        Object userSession = req.getSession().getAttribute(Constant.USER_SESSION);
        if (userSession == null) {
            //跳转错误页面
            rep.sendRedirect("/error.jsp");
        }
        chain.doFilter(request, response);

    }

    public void destroy() {

    }
}

接口配置web.xml

<?xml version="1.0" encoding="UTF-8"?>

    
        hello
        com.zhang.servlets.HelloServlet
    

    
        hello
        /hello
    

    
        hello
        /servlet/hello
    

    
        login
        /servlet/login
    

    
        login
        com.zhang.servlets.LoginServlet
    

    
        logout
        /servlet/logout
    

    
        logout
        com.zhang.servlets.LogoutServlet
    

    
        characterEncodingFilter
        com.zhang.filters.CharacterEncodingFilter
    

    
        characterEncodingFilter
        /servlet/*
    


    
        loginFilter
        com.zhang.filters.LoginFilter
    

    
        loginFilter
        /sys/*
    

    
    
        com.zhang.listeners.OnLineCountListener
    

    
        10