简单实现JavaWeb之Filter过滤器

1.什么是Filter过滤器

过滤器是处于客户端与服务器资源文件之间的一道过滤网,在访问资源文件之前,通过一系列的过滤器对请求进行修改、判断等,把不符合规则的请求在中途拦截或修改。也可以对响应进行过滤,拦截或修改响应。

过滤器一般用于登录权限验证、资源访问权限控制、敏感词汇过滤、字符编码转换等操作,便于代码重用,不必每个servlet中还要进行相应的操作。

Servlet API中提供了一个Filter接口,开发web应用时,如果编写的Java类实现了这个接口,则把这个Java类称之为过滤器Filter。

2.新建一个类,实现Filter接口,实现登录拦截

package cn.edu.mju.project1.filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @author : linxiaomin
 * create at:  2020/5/18  17:04
 */
@WebFilter("/*") //声明过滤器
public class AuthFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest)servletRequest;
        String path = request.getServletPath();//获取请求的地址
        //如果请求的地址包括/admin/login和/admin/captche,则不拦截不过滤
        if ("/admin/login".equals(path) ||
                "/admin/captche".equals(path) ||
                path.startsWith("/plugins") || path.startsWith("/dist")){
            filterChain.doFilter(servletRequest, servletResponse);//不拦截,不过滤
        }else {
            Object obj = request.getSession().getAttribute("user");
            if (obj != null){
                request.setAttribute("path",path);
                filterChain.doFilter(servletRequest, servletResponse);
            }else {
                ((HttpServletResponse)servletResponse).sendRedirect("/login");
            }
        }
        System.out.println("doFilter" + path);
    }

    @Override
    public void destroy() {

    }
}

3.测试结果

在过滤器中设置的admin/login不拦截,则进入页面成功:
简单实现JavaWeb之Filter过滤器_第1张图片
反之,则被过滤:
简单实现JavaWeb之Filter过滤器_第2张图片

你可能感兴趣的:(学习记录)