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")

 

 

 参考文章:

 

posted @   有梦想的肥宅  阅读(300)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示