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")
参考文章: