1,在WebConfig中注册拦截器
package com.cepht.platform.icl.config;
import org.apache.log4j.BasicConfigurator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
BasicConfigurator.configure();
registry.addViewController("/login").setViewName("login");
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
}
@Bean
public IclInterceptor myInterceptor() { //拦截器的实体类
return new IclInterceptor();
}
@Override
public void addInterceptors(InterceptorRegistry registry) { //注册过滤器
registry.addInterceptor(myInterceptor()).addPathPatterns("/**");
super.addInterceptors(registry);
}
}
2.实现过滤器接口
package com.cepht.platform.icl.config;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import com.cepht.platform.base.model.ilc.PgfOptLog;
import com.cepht.platform.icl.service.PgfOptLog.PgfOptLogService;
public class IclInterceptor implements HandlerInterceptor {
private Logger logger = LoggerFactory.getLogger(IclInterceptor.class);
// preHandle方法(预处理)、postHandle方法(返回处理),afterCompletion方法(后处理)。
// (1)preHandle: 在执行controller处理之前执行,返回值为boolean
// ,返回值为true时接着执行postHandle和afterCompletion,如果我们返回false则中断执行
// (2)postHandle:在执行controller的处理后,在ModelAndView处理前执行
// (3)afterCompletion :在DispatchServlet执行完ModelAndView之后执行
@Autowired
private PgfOptLogService pgfoptlogservice;
/**
* 重写方法 请求处理之前进行调用
*
* @param httpServletRequest
* @param httpServletResponse
* @param o
* @return
* @throws Exception
* @see org.springframework.web.servlet.HandlerInterceptor#preHandle(javax.servlet.http.HttpServletRequest,
* javax.servlet.http.HttpServletResponse, java.lang.Object)
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse sresponse, Object o) throws Exception {
return true;
}
/**
* 重写方法 请求进行处理之后
*
* @param httpServletRequest
* @param httpServletResponse
* @param o
* @param modelAndView
* @throws Exception
* @see org.springframework.web.servlet.HandlerInterceptor#postHandle(javax.servlet.http.HttpServletRequest,
* javax.servlet.http.HttpServletResponse, java.lang.Object,
* org.springframework.web.servlet.ModelAndView)
*/
@Override
public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o,
ModelAndView modelAndView) throws Exception {
}
/**
* 重写方法 preHandle 方法的返回值为true 时才会执行。顾名思义,该方法将在整个请求结束之后
*
* @param httpServletRequest
* @param httpServletResponse
* @param o
* @param e
* @throws Exception
* @see org.springframework.web.servlet.HandlerInterceptor#afterCompletion(javax.servlet.http.HttpServletRequest,
* javax.servlet.http.HttpServletResponse, java.lang.Object,
* java.lang.Exception)
*/
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse httpServletResponse, Object o,
Exception ex) throws Exception {
String url = request.getRequestURI();
if (url.startsWith("/view") || url.startsWith("/component")) {
return;
}
try {
// 插入日志逻辑
PgfOptLog pgfOptLog = pgfoptlogservice.insertLogService(request, httpServletResponse, o, ex);
if (pgfOptLog != null) {
pgfoptlogservice.insertSelective(pgfOptLog);
}
} catch (Exception e) {
logger.debug(e.getMessage());
}
}
}