过滤器filter和拦截器interceptor的使用区别

过滤器filter和拦截器interceptor的使用区别:

 1 <!-- 通过过滤器Filter解决spring mvc中乱码问题 -->
 2 <filter>
 3     <filter-name>dsfasf</filter-name>
 4     <filter-class>org.springframework.web.filter.ChracterEncoding</filter-class>
 5 </filter>
 6 
 7 <filter-mapping>
 8     <filter-name>sadfdsaf</filter-name>
 9     <url-pattern>*</url-partern>
10 </filter-mapping>

通过拦截器实现:

只有一个拦截器的执行顺序:preHandler -> controller -> postHandle -> afterCompletion
多个拦截器的执行顺序:(场景记忆法:高速上的两个路口的收费站)
preHandle1 (收费站1)
preHandler2 (收费站2)
controller (目的地)
postHandler2 (收费站2)
postHandler1 (收费站1)
afterCompletion2 (收费站2)
afterCompletion1 (收费站1)

1、创建拦截器类并且实现HandlerInterceptor:

public class TestInterceptor implements HandlerInterceptor{
    
    /**
     * 表示是否要把当前请求拦截下来,
     * false,表示请求将被终止,不再进入controller方法中,
     * true,表示继续往下进行。
     * @param  表示拦截器目标对象(这里就是TestInterceptor实例化对象)
     * @return [description]
     */
    @Override
    public boolean preHandle(request, response, object){}

    /**
     * 这里可以对controller返回的结果进行修改等操作
     * @param  request      [description]
     * @param  response     [description]
     * @param  object       [description]
     * @param  modelAndView [description]
     * @return              [description]
     */
    @Override
    public postHandle(request,response, object, modelAndView){}

    /**
     * 通常应用于Controller执行结束后,资源等销毁操作。(这个不是经常用)
     * @param  request   [description]
     * @param  response  [description]
     * @param  ojbect    [description]
     * @param  Exception [description]
     * @return           [description]
     * @throws Exception [description]
     */
    @Override
    public afterCompletion(request,response, ojbect, Exception) throw Exception{}
}

2、将拦截器注册到springmvc容器中

<mvc:interceptors>
    <mvc:interceptor>
        <bean class="TestInterceptor"/>
    </mvc:interceptor>
</mvc:interceptors>

3、配置拦截器的拦截规则

<mvc:interceptors>
    <mvc:interceptor>
        <mvc:mapping path="/"></mvc:mapping>
        <bean class="TestInterceptor"/>
    </mvc:interceptor>
</mvc:interceptors>

了解内容。拦截器其它的实现方式:

实现WebRequestInterceptor(org.springframework.web.context.request.拦截器其它的实现方式:实现WebRequestInterceptor)

与HandlerInterceptor区别:
1、preHandle()方法没有返回值,意味着请求将不能终止。
2、接口的方法中参数类型不一样。只有WebRequest

拦截器的使用场景:
场景1:处理乱码问题. 

/**
 * 在拦截器中设置请求参数的编码
 * @param  args [description]
 * @return      [description]
 */
boolean preHandle(HttpServerletRequest args){
    args.setCharacterEncoding("utf-8");
    return true;
}

场景2:权限验证。比如:对用户登录进行判断。

/**
 * 在拦截器中设置请求参数的编码
 * @param  args [description]
 * @return      [description]
 */
boolean preHandle(HttpServerletRequest args){
    args.setCharacterEncoding("utf-8");

    //因为用户登录信息存储在session中
    if(ags.getSession().getAttribute("user") == null){
        //用户没有登录,终止请求,返回到登录页面
        args.getRequestDispatcher().forward(request,response);
        return false;
    }
    return true;
}

转载于:https://www.cnblogs.com/yangcw/p/10878757.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
filter过滤器拦截是Web开发中常用的两种组件,它们在请求处理过程中起到了类似于"中间件"的作用,用于对请求进行处理和拦截Filter过滤器是Servlet规范中定义的一种组件,它可以对请求进行预处理和后处理。Filter可以拦截特定的URL请求,对请求进行处理,并将请求传递给下一个过滤器或Servlet。Filter可以用于对请求进行身份验证、日志记录、编码转换、资源过滤等等操作。一个应用可以配置多个Filter,它们按照配置的顺序依次执行。 拦截是在Spring框架中使用的一种组件,它也可以对请求进行预处理和后处理。拦截使用更加灵活,可以对请求进行更加细粒度的控制。拦截可以拦截Controller方法的调用,在方法执行前后做一些处理,例如身份验证、日志记录、性能监控等。一个应用可以配置多个拦截,它们按照配置的顺序依次执行。 在使用上,filterinterceptor有一些区别: - Filter是基于Servlet规范的,而Interceptor是Spring框架提供的; - Filter可以对所有的请求进行拦截,而Interceptor可以对Controller方法进行拦截; - Filter只能通过web.xml或注解进行配置,而Interceptor可以通过Java代码进行配置; - Interceptor可以访问Spring的上下文,而Filter不能。 总结来说,filterinterceptor都可以用于对请求进行处理和拦截,但是它们的具体实现和使用方式有一些差异。在使用时,可以根据具体需求选择适合的组件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值