一、首先写实现HandlerInterceptor的类
package com.cognizant.xd.interceptor;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class UserIntercepeptor implements HandlerInterceptor {
long start;//拦截开始时间
@Override
//请求执行前执行
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
System.out.println("***preHandle starter***");
System.out.println("Object:"+o);
start = System.currentTimeMillis();
return true;//true就执行,false则不执行
}
@Override
/**
* 视图渲染完成后行
* 但必须是preHandle()返回为true时才执行
*/
public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
System.out.println("***preHandle end***");
System.out.println("mav:"+modelAndView);
System.out.println("time:"+(System.currentTimeMillis()-start));//响应时间
}
@Override
/**
* 请求结束执行
* 但必须是preHandle()返回为true时才执行
*/
public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
System.out.println("***afterCompletion***");
System.out.println("Object:"+o);
System.out.println("Exception:"+e);
}
}
二、然后写config
package com.cognizant.xd.config;
import com.cognizant.xd.interceptor.UserIntercepeptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
/**
* Created by KANADE_XD on 7/9/2020 11:19 AM
*/
@Configuration
public class InterConfig extends WebMvcConfigurerAdapter {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new UserIntercepeptor()).addPathPatterns("/hello");
super.addInterceptors(registry);
}
}
三、WebMvcConfigurerAdapter常用方法
/** 解决跨域问题 **/
public void addCorsMappings(CorsRegistry registry) ;
/** 添加拦截器 **/
void addInterceptors(InterceptorRegistry registry);
/** 这里配置视图解析器 **/
void configureViewResolvers(ViewResolverRegistry registry);
/** 配置内容裁决的一些选项 **/
void configureContentNegotiation(ContentNegotiationConfigurer configurer);
/** 视图跳转控制器 **/
void addViewControllers(ViewControllerRegistry registry);
/** 静态资源处理 **/
void addResourceHandlers(ResourceHandlerRegistry registry);
/** 默认静态资源处理器 **/
void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer);
addInterceptor:需要一个实现HandlerInterceptor接口的拦截器实例
addPathPatterns:用于设置拦截器的过滤路径规则
excludePathPatterns:用于设置不需要拦截的过滤规则
四、最后写路径为hello的controller测试
package com.cognizant.xd.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* Created by KANADE_XD on 7/9/2020 11:19 AM
*/
@Controller
public class TestController {
@RequestMapping("/hello")
@ResponseBody
public String hello(){
return "拦截器测试";
}
}
五、测试结果:
***preHandle starter***
Object:public java.lang.String com.cognizant.xd.controller.TestController.hello()
***preHandle end***
mav:null
time:15
***afterCompletion***
Object:public java.lang.String com.cognizant.xd.controller.TestController.hello()
Exception:null