zoukankan      html  css  js  c++  java
  • Java Web学习(十一)Java过滤器

    一、引言

      上一篇文章学习了java三大器的拦截器,拦截器主要是针对于action请求进行拦截处理的,那么对于requst的一些信息如果在调用前,想先进行过滤和处理,那么就要使用到第二个神器,也就是本文的主角过滤器~那首先先简单了解一下过滤器的基本原理。

      概念:拦截request进行处理后再交给下一个过滤器或servlet处理的中间组件,也可以对返回的response进行拦截处理。

      作用域:在服务器启动时就会创建的,只会创建一个实例,常驻内存。

      应用场景:统一设置编码格式、访问权限控制、敏感字符过滤、自动登录等。

      下面通过代码来看下过滤器的几个应用场景~

    二、代码实现

      实现过滤器功能,我们得先进行一些前期的配置:

       按照上图配置好了以后,重启SpringBoot项目时,我们自定义的过滤器就能生效了

    字符编码过滤器 

    /**
     * 字符编码过滤器
     * @Author 有梦想的肥宅
     */
    @WebFilter(
            urlPatterns = "/*",/*通配符(*)表示对所有的web资源进行拦截*/
            initParams = {
                    @WebInitParam(name = "filterName", value = "CharsetFilter"),
                    @WebInitParam(name = "charset", value = "utf-8")
            })
    @Order(1)//指定过滤器的执行顺序,值越大越靠后执行
    public class CharsetFilter implements Filter {
        private String filterName;
        private String charset;
    
        /**
         * 初始化方法  接收一个FilterConfig类型的参数 该参数是对Filter的一些配置
         */
        @Override
        public void init(FilterConfig config) throws ServletException {
            filterName = config.getInitParameter("filterName");
            charset = config.getInitParameter("charset");
            System.out.println("过滤器名称:" + filterName);
            System.out.println("字符集编码:" + charset);
    
        }
    
        /**
         * 过滤方法 主要是对request和response进行一些处理,然后交给下一个过滤器或Servlet处理
         */
        @Override
        public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
            System.out.println(filterName + "doFilter()");
            req.setCharacterEncoding(charset);//设置请求request的字符编码
            resp.setCharacterEncoding(charset);//设置响应response的字符编码
            chain.doFilter(req, resp);
        }
    
        /**
         * 销毁时方法
         */
        @Override
        public void destroy() {
            System.out.println(filterName + "销毁");
        }
    
    }

      源码贴上了,来简单解析一下:

     

       我们常用的过滤器配置有一下几种:

    urlPatterns:配置要拦截的资源

    • 1、以指定资源匹配。例如"/login.html"
    • 2、以目录匹配。例如"/user/login/*"
    • 3、以后缀名匹配,例如"*.html"
    • 4、通配符,拦截所有web资源。"/*"

    initParams:配置初始化参数

    • 使用@WebInitParam注解来配置,如:@WebInitParam(name = "charset", value = "utf-8")

     参考文章:

     

  • 相关阅读:
    [CSS] Showing horizontal scrollbar always for the table
    [Angular Unit Testing] Testing Component methods
    [Angular Unit Testing] Testing Services with dependencies
    Win7下unetbootin-windows-585工具制作Ubuntu12.04 U盘启动盘
    一个外行谈移动互联网产品的生与死
    unity 距离某天还有多久
    UI线程与worker线程
    关于 unity3d securityexception no valid crossdomain policy available 的错误解决方法
    小窍门:变更Windows Azure Websites自带的node.exe版本
    Windows SVN变更发送邮件通知(JAVA实现)
  • 原文地址:https://www.cnblogs.com/riches/p/12654359.html
Copyright © 2011-2022 走看看