过滤器Filter

川长思鸟来 2021-11-05 08:02 649阅读 0赞

1、Java三大器










































监听器Listener 过滤器Filter 拦截器Interceptor
作用目标 系统级别参数、对象 所有web请求 Action(部分web请求)
实现 事件 函数回调 反射机制(动态代理)
应用 打印日志、统计网站在线人数、访问量等 设置字符编码、过滤敏感词汇、权限访问控制等 拦截未登入用户等
Servlet支持 ServletContextListener、HttpSessionListener等抽象接口 Filter接口
Spring支持 HandlerInterceptor、HandlerInterceptorAdapter

2、定义

(1)过滤器是一个实现了 javax.servlet.Filter 接口的 Java 类,依赖于servlet容器。
(2)对Web服务器管理的所有Web资源进行过滤,并且添加某些功能,如:字符编码过滤,设置成统一的utf-8、过滤敏感词汇、URL权限访问控制等。
(3)过滤器不是用户主动调用的,而是根据规则自己执行。
(4)一个过滤器实例只能在容器初始化时调用一次,即filter对象只会创建一次,init方法也只会执行一次。

3、过滤器与拦截器的区别

  • 过滤器能过滤所有的web请求,而拦截器只针对Action部分请求,过滤器能修改request;
  • 过滤器依赖于servlet容器,拦截器依赖于web框架,在SpringMVC中依赖于SpringMVC框架;
  • 过滤器只在请求的前后使用,拦截器可以详细到每个方法,更具有针对性;
  • 一个过滤器实例只能在容器初始化时调用一次,拦截器可多次调用。

4、过滤器方法






















方法 描述
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 该方法完成实际的过滤操作,当客户端请求方法与过滤器设置匹配的URL时,Servlet容器将先调用过滤器的doFilter方法。
public void init(FilterConfig fConfig) web 应用程序启动时,web 服务器将创建Filter 的实例对象,并调用其init方法,读取web.xml配置,完成对象的初始化功能
public void destroy() 销毁过滤器

注:Web服务器在调用doFilter()时,会传递一个filterChain对象进来,filterChain对象也提供了一个doFilter方法,调用该方法,则Web服务器就会调用Web资源的service方法,即Web资源就会被访问,否则Web资源不会被访问。

5、多个过滤器应用顺序

(1)在web.xml中按<filter-mapping>的顺序;
(2)注解@WebFilter方式时按过滤器字母顺序;
(3)都存在时优先应用web.xml中的配置。

6、配置

(1)使用注解@WebFilter
(2)web.xml中配置

  1. <filter>
  2. <description>登入权限访问控制</description>
  3. <filter-name>LoginFilter</filter-name>
  4. <filter-class>com.xinx.own.LoginFilter</filter-class>
  5. <!-- FilterConfig 对象参数(初始化),根据需求自行设置-->
  6. <init-param>
  7. <param-name>charset</param-name>
  8. <param-value>UTF-8</param-value>
  9. </init-param>
  10. </filter>
  11. <!-- 映射路径 -->
  12. <filter-mapping>
  13. <filter-name>LoginFilter</filter-name>
  14. <!-- 要过滤的路径 -->
  15. <url-pattern>/*</url-pattern>
  16. <!-- 过滤类型 -->
  17. <dispatcher>REQUEST</dispatcher>
  18. </filter-mapping>

7、过滤器的过滤类型:

<dispatcher> 标签中配置

  • REQUEST:当用户直接访问页面时,Web容器将会调用过滤器。如果目标资源是通过RequestDispatcher的include()或forward()方法访问时,那么该过滤器就不会被调用。
  • INCLUDE:如果目标资源是通过RequestDispatcher的include()方法访问时,那么该过滤器将被调用。除此之外,该过滤器不会被调用。
  • FORWARD:如果目标资源是通过RequestDispatcher的forward()方法访问时,那么该过滤器将被调用,除此之外,该过滤器不会被调用。
  • ERROR:如果目标资源是通过声明式异常处理机制调用时,那么该过滤器将被调用。除此之外,过滤器不会被调用。

8、示例

  1. public class LoginFilter implements Filter {
  2. /** * Default constructor. */
  3. public LoginFilter() { }
  4. /** * @see Filter#destroy() */
  5. public void destroy() { }
  6. /** * @see Filter#init(FilterConfig) */
  7. public void init(FilterConfig fConfig) throws ServletException {
  8. //获取初始化参数
  9. String fName = fConfig.getFilterName();
  10. System.out.print("过滤器名字:"+fName);
  11. ......
  12. }
  13. /** * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain) */
  14. public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
  15. // place your code here
  16. System.out.print("开始#######################");
  17. //获取request、response、session对象
  18. HttpServletRequest req = (HttpServletRequest) request;
  19. HttpServletResponse resp = (HttpServletResponse) response;
  20. HttpSession session = req.getSession();
  21. /** * 对request执行过滤操作 * 续自己的业务 */
  22. ......
  23. // pass the request along the filter chain
  24. chain.doFilter(request, response);
  25. }
  26. }

发表评论

表情:
评论列表 (有 0 条评论,649人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Filter 过滤器

    Javaweb中的过滤器可以拦截所有访问web资源的请求或响应操作。 1.什么是Filter及其作用介绍      Filter是sun公司中servlet2.3后增加的一

    相关 Filter过滤器

    Filter的基本功能是对servlet容器调用servlet的过程进行拦截,从而在servlet进行响应处理的前后实现一些特殊的功能。 在servletAPI中定义了三个接

    相关 Filter过滤器

    过滤器: 过滤   过滤请求 可以写多个 从用户访问  ->第一个过滤器  -> 第二个过滤 -> servlet   生命周期:随着项目的启动而创建 当访问了地址后而

    相关 Filter过滤器

    一、Filter过滤器 1、介绍       Web开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态资源文件等进行

    相关 Filter 过滤器

    > 过滤器,其实就是对客户端发出来的请求进行过滤。浏览器发出,然后服务器派Servlet处理。在中间就可以过滤,其实过滤器起到的是拦截的作用,也就是拦截器。 作用