当前位置: java基础教程 > 22-servlet框架 > 阅读正文

filter过滤器

2021.4.19.   623 次   994字

filter 是一个过滤器, 能够对请求进行拦截, 通常用于登录验证, 处理编码, 敏感字符过滤等

创建Filter

filter 是一个 class, 使用 idea 等编译器可以直接创建, 该类实现了 Filter 接口

该类需要配置才能使用, 配置拦截的路径, 方式等

关键方法 : doFilter

使用 doFilter 方法, 写上你要处理的逻辑代码, 该方法三参数, request, response, filterchain, 分别代表请求对象, 响应对象, 以及过滤链对象

其中 filterchain 对象, 有一个方法, filterChain.doFilter(servletRequest,servletResponse); 表示放行, 在它之前的代码表示对请求的处理, 在它之后的代码表示对响应的处理

对于 filter 的另外 2 个方法, init 和 destroy 表示web容器启动和销毁的处理

配置filter

filter 可以使用 web.xml 或 @WebFilter 注解, 例如

<filter>
	<filter-name>demo1</filter-name>
	<filter-class>com.52dixiaowo.web.filter.FilterDemo1</filter-class>
</filter>
<filter-mapping>
	<filter-name>demo1</filter-name>
	<!-- 拦截路径 -->
	<url-pattern>/*</url-pattern>
</filter-mapping>

对于拦截路径, 下面有 4 种简单的方式, 还可以自由组合

  1. 具体资源路径: /index.jsp 只有访问index.jsp资源时,过滤器才会被执行
  2. 拦截目录: /user/* 访问/user下的所有资源时,过滤器都会被执行
  3. 后缀名拦截: *.jsp 访问所有后缀名为jsp资源时,过滤器都会被执行
  4. 拦截所有资源:/* 访问所有资源时,过滤器都会被执行

对于请求方式, 还可以选定哪种请求, 需要设置dispatcherTypes属性

  1. REQUEST:默认值。浏览器直接请求资源, 也可以同时设置多个值
  2. FORWARD:转发访问资源
  3. INCLUDE:包含访问资源
  4. ERROR:错误跳转资源
  5. ASYNC:异步访问资源

filter 过滤链的顺序问题: 如果是web.xml是按照<filter-mapping>的顺序, 而注解则是类名字符串大小, 比如 AFilter 比 BFilter先拦截.

本篇完,还有疑问?

加入QQ交流群:11500065636 IT 技术交流群