JavaEE三大器(1)-过滤器

Filter简介

Filter即过滤器是JavaEE中一项重要的技术,主要用于管理JavaEE中的资源访问,例如:接口、html文件、jsp文件、静态资源文件等。

如何自定义Filter?

当使用springMVC时,首先需在web.xml文件中配置Filter。例子如下:

<!--配置过滤器-->  
  <filter>  
      <filter-name>filterConfig</filter-name>  
      <filter-class>com.hhy.test.FilterConfig</filter-class>  
  </filter>  
  <!--映射过滤器-->  
  <filter-mapping>  
      <filter-name>filterConfig</filter-name>  
      <!--“/*”表示拦截所有的请求 -->  
      <url-pattern>/*</url-pattern>  
  </filter-mapping>  

配置项说明

<filter>中配置项:

    <filter-name>:过滤器的名称

    <filter-class>:该过滤器对应的配置类

    <inti-param>:初始化参数

    <param-name>:参数名称

    <param-value>:参数值 

<filter-mapping>中配置项:

    <filter-name>:过滤器名称,和<filter>中的<filter-name>相同

    <url-pattern>:过滤器过滤的资源路径

    <dispatcher>:指定过滤器过滤的资源的调用方式,默认为REQUEST

dispatcher取值和意义

  • REQUEST:如果资源的调用方式是RequestDispatcher的forward()或include(),那么该资源路径即使匹配,过滤器也不会起作用
  • FORWARD:调用方式是RequestDispatcher的forward()起作用
  • INCLUDE:调用方式是RequestDispatcher的include()起作用
  • ERROR:如果该资源适配异常处理机制调用,则该过滤器起作用

其次要定义java.servlet.Filter接口的实现类,并重写其中的三个抽象方法。如下:

public class FilterConfig implements Filter {

    /**
     * servlet容器创建Filter实例时,调用init方法初始化Filter实例,
     * 例如:获取Filter的名称等
     * @param filterConfig
     * @throws ServletException
     */
    @Override
    public void init(javax.servlet.FilterConfig filterConfig) throws ServletException {

    }

    /**
     * 主要通过doFilter方法实现资源过滤
     * @param request
     * @param response
     * @param chain
     * @throws IOException
     * @throws ServletException
     */
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        System.out.println("请求之前过滤。。。。。");
        chain.doFilter(request,response);
        System.out.println("请求之后过滤。。。。。");
    }

    /**
     * servlet容器销毁filter之前调用destroy方法
     */
    @Override
    public void destroy() {

    }
}
  • init(FilterConfig config):在servlet容器创建Filter实例时,调用该方法完成Filter实例的初始化,该Filter对象只会创建一次
  • doFilter(ServletRequest request,ServletResponse response,FilterChain chain):主要完成对资源的过滤,可在进入接口之前过滤,也可在完成接口操作之后过滤,通过chain.doFilter()区分前后。如果不想让用户进入接口,可不调用chain.doFiltere()方法
  • destory():servlet 容器销毁Filter之前调用该方法,可用于资源的释放等
过滤链

web.xml中可定义多个过滤器,过滤器的过滤顺序和web.xml中filter的定义顺序相同。每次调用FilterChain对象的doFilter()方法,servlet容器会检查FilterChain对象中是否还有Filter,如果有接着过滤;如果没有则进入接口操作资源

springboot中使用Filter

在SringBoot中使用Filter要简单一点,如下:

@Order(1)//当有多个Filter时,标识Filter的顺序,数字为正数,越小表示越先过滤
@WebFilter(filterName = "testFilter",urlPatterns = "/login/*")
public class FilterConfig implements Filter {

    /**
     * servlet容器创建Filter实例时,调用init方法初始化Filter实例,
     * 例如:获取Filter的名称等
     * @param filterConfig
     * @throws ServletException
     */
    @Override
    public void init(javax.servlet.FilterConfig filterConfig) throws ServletException {

    }

    /**
     * 主要通过doFilter方法实现资源过滤
     * @param request
     * @param response
     * @param chain
     * @throws IOException
     * @throws ServletException
     */
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        System.out.println("请求之前过滤。。。。。");
        chain.doFilter(request,response);
        System.out.println("请求之后过滤。。。。。");
    }

    /**
     * servlet容器销毁filter之前调用destroy方法
     */
    @Override
    public void destroy() {

    }
}

其次,在Application.java类中添加注解@ServletComponentScan即可

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值