随笔 - 355  文章 - 0  评论 - 3  阅读 - 62509

过滤器学习

过滤器学习

1.什么是过滤器

  • Filter 表示过滤器,是JavaWeb三大组件(Servlet、Filter、Listener)之一。
  • 过滤器可以把对资源的请求拦截下来,从而实现一些特殊的功能。
  • 过滤器一般完成一些通用的操作,如权限控制、统一编码处理、敏感字符处理等。

2.执行流程

执行放行前逻辑->放行->访问资源->执行放行后逻辑

放行前:对 request 数据进行处理

放行后:对 response 数据进行处理

3.拦截路径配置

拦截具体资源:/index.jsp

目录拦截:/user/*:访问/user下的所有资源都会被拦截

后缀名拦截: .jsp:访问后缀名为jsp的资源都会被拦截

拦截所有:/*:访问所有资源都会被拦截

4.过滤器链

配置在前面的过滤器/字母在前的先执行(放行前逻辑),放行后的逻辑顺序相反

复制代码
package com.xxxx.filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.io.IOException;
@WebFilter("/*")
public class Filter01 implements Filter {

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request=(HttpServletRequest)servletRequest;
        //判断访问资源是否和登录注册相关
        String[] urls={"/login.jsp","/imgs","/css","/loginServlet","/register.jsp","/registerServlet","/checkCodeServlet"};
        //获取当前的访问路径
        String url = request.getRequestURL().toString();
        //循环判断
        for (String u:urls) {
            if(url.contains(u)){
                //找到了->放行
                filterChain.doFilter(servletRequest,servletResponse);
                return;
            }
        }

        HttpSession session = request.getSession();
        Object user = session.getAttribute("user");
        if(user!=null){
            filterChain.doFilter(servletRequest,servletResponse);
        }else{
            request.setAttribute("name","您尚未登录");
            request.getRequestDispatcher("/login.jsp").forward(request,servletResponse);
        }
    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        Filter.super.init(filterConfig);
    }
    @Override
    public void destroy() {
        Filter.super.destroy();
    }
}
复制代码

 

posted on   201812  阅读(22)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示