Javaweb-servlet中的Filter过滤器使用方法。

2023-02-02 10:59:19 浏览数 (2)

过滤器是什么?

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

 应用场景: 判断用户是否登录、过滤器请求记录日志、身份验证、权限控制等。

 简单来说,过滤器就相当于每次发起请求之前进行的一次检验,常常被用于某些需要用户登录才能访问的页面等场景。

 例如:我们设定了/user的目录下要求是只有登录后的用户才能访问/user目录下的页面,这个时候,我们就可以设置一个过滤器,过滤器中判断用户的session是否为已经登录状态,如果已经登录了,才可以放行,这样一来,就可以拦截非登录用户访问指定的页面,而导致报错等问题。

过滤器的使用方式

①使用Filter接口 implements Filter (jakarta.servlet) ②重写doFilter方法,获取传递过来的页面信息。 ③进行业务逻辑判断,要是符合条件 filterChain.doFilter(req, response); 放行,将数据传输出去。不符合条件,return,并执行指定业务。

示例代码:

代码语言:javascript复制
//此处表示对所有页面都进行过滤器处理
//当前页面写了校验用户访问页面发送的get请求数据是否为指定值,如果是指定值就放行,否则输出权限不足。
@WebFilter("/*")
public class AFilter implements Filter {
    
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        response.setHeader("Content-type", "text/html;utf-8");
        String userName = req.getParameter("userName");
        if (!"mfish9".equals(userName)) {
            PrintWriter writer = response.getWriter();
            writer.print("权限不足");
            writer.close();
            return;
        }
        //放行
        filterChain.doFilter(req, response);
    }
}

拦截器路径配置

1.所有资源拦截:@WebFilter("/*") //这是指访问所有资源的时候都会经过过滤器 静态资源(css/js/mp4) 2.具体资源路z径拦截:@WebFilter("/index.jsp") //这是指访问index.jsp的时候会经过过滤器 3.具体目录拦截:@WebFilter("/fish9/*") //这是指访问fish9目录下的所有资源时会经过过滤器 127.0.0.1:8080/fish9/A 127.0.0.1:8080/fish9/B 4.具体后缀名拦截:@WebFilter("*.jsp") //这时指访问后缀名为.jsp的资源时会经过过滤器

过滤器链

过滤器1执行完毕之后再执行过滤器2

注解配置的Filter, 优先级按照过滤器类名 (字符串)的自然排序

例如:先执行aFilter,在执行bFilter

对指定页面不执行过滤器拦截

只需要在过滤器类里面设置一个变量即可。

代码语言:javascript复制
//当前的头部设置的是@WebFilter("/*")

//下面是过滤掉部分的页面不被拦截器拦截
private String[] excludeUrls = new String[]{"/login","/页面路径"};

本文共 634 个字数,平均阅读时长 ≈ 2分钟

0 人点赞