SpringMVC拦截器(四)

本文深入探讨了Spring MVC框架中拦截器的工作原理及其应用场景,包括日志记录、权限检查、性能监控等,并详细介绍了两种实现方式:实现HandlerInterceptor接口与继承HandlerInterceptorAdapter类。

拦截器,本质类似于AOP,主要的应用场景:

  • 日志记录:记录请求信息的日志,以便进行信息监控、信息统计、计算PV等。
  • 权限检查:如登录检测,进入处理器检测是否登录,没有登录返回登录页面。
  • 性能监控:记录拦截器进入处理器和离开处理器的时间。
  • 通用行为:读取cookie中的用户信息放入请求,从而方便后续流程使用,还有如提取Locale、Theme信息等,只要是多个处理器的需要都可以使用拦截器实现。
  • OpenSessionView:如Hibernate,在进入处理器打开Session,在完成后关闭Session。

拦截器有两种实现方式:

1. 实现拦截器处理器接口:org.springframework.web.servlet.HandlerInterceptor

  • preHandle(HttpServletRequest request,HttpServletResponse response, Object handler):预处理回调方法,在Controller前执行,返回true继续执行下一个流程(interceptor或handler)。返回false中断执行,不会再调用拦截器或处理器,可以操作reponse来产生响应。
  • postHandle(HttpServletRequest request,HttpServletResponse response, Object handler,ModelAndView modelAndView):后处理回调方法,在Controller后(渲染视图前)执行,可以通过对ModeAndView进行处理或对视图进行处理,ModeAndView可能为null
  • afterCompletion(HttpServletRequest request,HttpServletResponse response, Object handler, Exception ex):整个请求完毕的回调方法,在视图渲染完毕时回调。 

2. 继承拦截器适配器类:org.springframework.web.servlet.handler.HandlerInterceptorAdapter

  实现拦截器需要重写三个接口,拦截器适配器为这三个方法做了空实现,可以继承这个类,根据需要重写拦截器的1~3个方法。

区别:

  • 拦截器适配器为拦截器接口的三个方法做了空实现,可以根据需要复写这1~3个方法。

  • 拦截器适配器实现了AsyncHandlerInterceptor接口,提供afterConcurrentHandlingStarted()函数,用于处理Controller的异步请求

项目配置:

<!-- 拦截器定义 -->
<bean id="logInterceptor" class="com.wang.interceptor.LogInterceptor"/>
<bean id="performanceInterceptor" class="com.wang.interceptor.PerformanceInterceptor"/>
<bean id="testInterceptorAdapter" class="com.wang.interceptor.TestInterceptorAdapter"/>

<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
  <!-- 拦截器配置,顺序执行 -->
  <property name="interceptors">
    <list>
                 <ref bean="logInterceptor"/>
         <ref bean="performanceInterceptor"/>
         <ref bean="testInterceptorAdapter"/>
      </list>
    </property>
</bean>

 

转载于:https://www.cnblogs.com/myitnews/p/11568856.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值