首页 > 其他分享 >Filter过滤器

Filter过滤器

时间:2023-02-23 12:46:47浏览次数:39  
标签:HttpServletRequest 路径 Filter doFilter 过滤器 拦截

一、什么是过滤器


Filter过滤器是JavaWeb中三大组件之一(三大组件:Servlet程序、Filter过滤器、listener监听器)
Filter是javaEE的规范,也就是接口

二、过滤器的作用


拦截请求,过滤响应:

解释:过滤器可以把请求的资源拦截下来,在拦截过程中加上一些代码、功能实现一些特殊的功能

说明:过滤器在访问每一个资源的时候都会被执行,我们可以在过滤器中加上一些拦截性的操作

过滤器拦截请求常见的应用场景:

- 权限检查
- 日志操作
- 事务处理
- 统一编码处理
- 敏感数据拦截

三、Filter过滤器的使用


1.Filter的访问

  1. xml配置

    <web-app>
        ...
        <filter>
            <!--    为filter起别名-->
            <filter-name>FilterTest</filter-name>
            <!--    具体过滤器的全类名-->
            <filter-class>com.filter.FilterTest</filter-class>
        </filter>
        <filter-mapping>
            <!--    访问某个路径时调用哪个filter-->
            <filter-name>FilterTest</filter-name>
            <!--    什么路径可以访问到filter-->
            <url-pattern>/*</url-pattern>
        </filter-mapping>
    </web-app>
    
  2. 注解

    //什么路径可以访问该filter
    @WebFilter("/*")
    

2.Filter的使用步骤

  1. 新建类实现Filter接口
  2. 根据需要重写Filter接口的方法(必须重写doFilter,也就是过滤器功能的方法)
  3. 在doFilter方法中定义相关的逻辑(记得判断并放行)
//执行方法
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
    //放行
    chain.doFilter(request, response);
}

3. 生命周期

- 构造方法			     -|
						   基本一起,在web工程启动后创建对象,然后初始化
- init()------初始化	  -|
- doFilter()--执行		  每次只要有请求都会拦截并执行
- destory()---销毁		  停止web工程时自动销毁

4.Filter的拦截路径

拦截路径表示filter对哪些请求进行拦截(访问所有资源,都会被拦截)

  1. 拦截jsp

    @WebFilter("*.jsp")
    
  2. 拦截某一个目录下

    @WebFilter("/a/*")
    
  3. 拦截某一个路径

    @WebFilter("/index.jsp")
    
  4. 放行资源、路径

    //将ServletRequest转换成HttpServletRequest子对象
    HttpServletRequest httpServletRequest = (HttpServletRequest) request;
    //放行资源\路径
    String[] paths = {"/imgs/", "/css/", "/js/", "/login.jsp", "/loginServlet", "/register.jsp", "/enrollServlet"};
    //获取当前路径
    String url = httpServletRequest.getRequestURL().toString();
    //比对路径
    for (String str : paths) {
        //判断路径中是否存在放行的资源\路径
        if (url.contains(str)) {
            //放行
            chain.doFilter(request, response);
        }
    }
    

四、过滤器链


Filter过滤器链是指在 Web 应用中,部署了多个 Filter 来拦截同一目标资源的情况;Filter 链中的 Filter 的执行顺序由 <filter-mapping> 标签的配置顺序决定(A-Z)

Filter 链中的任何一个 Filter 没有调用 FilterChain.doFilter() 方法,请求都不会到达目标资源

五、处理网页编码


//将ServletRequest转换成HttpServletRequest子对象
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
//将ServletResponse转换成HttpServletResponse子对象
HttpServletResponse httpServletResponse = (HttpServletResponse) response;
//设置页面请求的编码
httpServletRequest.setCharacterEncoding("utf-8");
//设置服务器响应的编码
httpServletResponse.setContentType("text/html;charset=utf-8");
//放行
chain.doFilter(request, response);

标签:HttpServletRequest,路径,Filter,doFilter,过滤器,拦截
From: https://www.cnblogs.com/ynxiyan/p/17147527.html

相关文章