Spring之?dāng)r截器
一、SpringMvc攔截器
springmvc.xml配置
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**" />
<bean class="com.test.interceptor.MyInterceptor">
</bean>
</mvc:interceptor>
</mvc:interceptors>
攔截器MyInterceptor類代碼(統(tǒng)計(jì)接口訪問次數(shù))
public class MyInterceptor extends HandlerInterceptorAdapter {
private ThreadLocal<StopWatch> stopWatchLocal = new ThreadLocal<StopWatch>();
@Autowired
protected SystemInterfaceLogService systemInterfaceLogService;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
StopWatch stopWatch = new StopWatch(handler.toString());
stopWatchLocal.set(stopWatch);
stopWatch.start("stopWatchLocal");
return super.preHandle(request, response, handler);
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
Long time = 0L;
StopWatch stopWatch = stopWatchLocal.get();
if (stopWatch != null) {
if (stopWatch.isRunning()) {
stopWatch.stop();
time = stopWatch.getTotalTimeMillis();
stopWatchLocal.remove();
}
}
String currentPath = request.getRequestURI();
String requestType = request.getMethod();
String queryString = "";
if(requestType.equals("GET")){
queryString = request.getQueryString();
queryString = queryString == null ? "" : "?" + queryString;
}else{
BufferedReader br=request.getReader();
String inputLine = "";
while ((inputLine = br.readLine()) != null) {
queryString += inputLine;
}
br.close();
}
SystemInterfaceLogDtl data = new SystemInterfaceLogDtl();
data.setUrlId(UUID.randomUUID().toString());
data.setSystemType("test");
data.setRequestUrlName(currentPath.substring(currentPath.lastIndexOf("/")+1,currentPath.length()));
//請(qǐng)求接口路徑data.setRequestUrl(currentPath);
//請(qǐng)求接口參數(shù)data.setRequeryParm(queryString);
//請(qǐng)求接口時(shí)長(ms) data.setRequeryTime(time);String date = DateUtils.convertToTime(new Date());
data.setCreateTime(date);
data.setLastTime(date);
systemInterfaceLogService.insertSystemInterfaceLog(data);
super.afterCompletion(request, response, handler, ex);
}
public void afterPropertiesSet() throws Exception {
}
}
二、SpringBoot攔截器
添加web過濾器
1、添加web 過濾器,管理過濾的類,以及過濾的請(qǐng)求路徑
2、實(shí)現(xiàn)WebMvcConfigurer?類,復(fù)寫父類的方法 addInterceptors
3、通過registry.addInterceptor攔截類,addPathPatterns攔截路徑,excludePathPatterns添加允許路徑
@Configuration
public class addInterceptor implements WebMvcConfigurer {
@Resource
private MyInterceptor authInterceptor;
/**
* 自定義資源映射
*
* @param registry
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
}
/**
* 攔截頁面
*
* @param registry
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(authInterceptor).addPathPatterns("/**").excludePathPatterns("/");
}
/**
* 視圖跳轉(zhuǎn)控制器
* @param registry
*/
@Override
public void addViewControllers(ViewControllerRegistry registry) {
}
/**
* 默認(rèn)靜態(tài)資源處理器
* @param configurer
*/
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
}
/**
* 配置視圖解析器
* @param registry
*/
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
}
/**
* 配置內(nèi)容裁決的一些選項(xiàng)
* @param configurer
*/
@Override
public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
}
}
攔截器MyInterceptor類代碼(統(tǒng)計(jì)接口訪問次數(shù))
@Component
public class MyInterceptor extendsHandlerInterceptorAdapter {
private ThreadLocal<StopWatch> stopWatchLocal = new ThreadLocal<StopWatch>();
@Autowired
protected SystemInterfaceLogService systemInterfaceLogService;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
StopWatch stopWatch = new StopWatch(handler.toString());
stopWatchLocal.set(stopWatch);
stopWatch.start("stopWatchLocal");
return super.preHandle(request, response, handler);
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
Long time = 0L;
StopWatch stopWatch = stopWatchLocal.get();
if (stopWatch != null) {
if (stopWatch.isRunning()) {
stopWatch.stop();
time = stopWatch.getTotalTimeMillis();
stopWatchLocal.remove();
}
}
String currentPath = request.getRequestURI();
String requestType = request.getMethod();
String queryString = "";
if(requestType.equals("GET")){
queryString = request.getQueryString();
queryString = queryString == null ? "" : "?" + queryString;
}else{
BufferedReader br=request.getReader();
String inputLine = "";
while ((inputLine = br.readLine()) != null) {
queryString += inputLine;
}
br.close();
}
SystemInterfaceLogDtl data = new SystemInterfaceLogDtl();
data.setUrlId(UUID.randomUUID().toString());
data.setSystemType("test");
data.setRequestUrlName(currentPath.substring(currentPath.lastIndexOf("/")+1,currentPath.length()));
//請(qǐng)求接口路徑data.setRequestUrl(currentPath);
//請(qǐng)求接口參數(shù)data.setRequeryParm(queryString);
//請(qǐng)求接口時(shí)長(ms) data.setRequeryTime(time);String date = DateUtils.convertToTime(new Date());
data.setCreateTime(date);
data.setLastTime(date);
systemInterfaceLogService.insertSystemInterfaceLog(data);
super.afterCompletion(request, response, handler, ex);
}
@Override
public void afterPropertiesSet() throws Exception {
}
評(píng)論
圖片
表情
