15,SpringMVC中添加Interceptor (JavaConfig方式)

来源:互联网 发布:淘宝代付一天多少次 编辑:程序博客网 时间:2024/06/05 06:54

HandlerInterceptor接口简介

在SpringMVC中使用自拦截器时需要实现HandlerInterceptor接口,该接口有三个方法:preHandle,postHandle,afterCompletion。一个工程中可以配置多个拦截器,这些拦截器按照先后顺序添加到配置中后就形成了Interceptor chain。执行顺序:Interceptor1.preHandle->Interceptor2.preHandle->HandlerAdaptor->Interceptor2.postHandle->Interceptor1.postHandle->渲染View->Interceptor2.afterCompletion->Interceptor1.afterCompletion。其中HandlerAdapter负责处理请求并返回数据和视图。注意以上执行顺序是preHandle都返回true的情况,当Interceptor2.preHandle返回false时则直接跳到Interceptor1.afterCompletion,即前一个拦截器的afterCompletion。

另外,如果不是需要实现HandlerInterceptor的三个接口时,可以使用HandlerInterceptorAdaptor接口。在该接口中可以只指定单个方法的实现。

实现代码

自定义拦截器:

public class MyInterceptor implements HandlerInterceptor {@Overridepublic void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)throws Exception {System.out.println("after");}@Overridepublic void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)throws Exception {System.out.println("post");}@Overridepublic boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {System.out.println("pre");return true;}}

拦截器配置:

在继承于WebMvcConfigurerAdapter的子类WebConfig(自己的类)中重写addInterceptors方法。

@Overridepublic void addInterceptors(InterceptorRegistry registry) {// TODO Auto-generated method stubregistry.addInterceptor(new MyInterceptor()).addPathPatterns("/mvc/*");}