第一步:自定义拦截器
package com.dmo.config;
import com.dmo.util.IpUtil;
import com.dmo.util.RequestUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 拦截器
*/
public class LogInterceptor implements HandlerInterceptor {
private static final Logger LOGGER = LoggerFactory.getLogger(LogInterceptor.class);
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String uri = request.getRequestURI();
String method = request.getMethod();
LOGGER.info("请求开始, url: {}, ip:{}, method: {}", uri, IpUtil.getIpAddress(request), method);
RequestUtil.getHeaderParams(request);
RequestUtil.getBodyParams(request);
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
}
}
第二步:注册拦截器
package com.dmo.config;
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.WebMvcConfigurer;
/**
* 拦截器配置
* jdk1.8后接口添加了default,接口中的方法不需要全部被实现,所以直接实现接口就行了,
* 不需要通过抽象类 WebMvcConfigurerAdapter 来过渡。
* 或者继承 WebMvcConfigurationSupport
* 但是静态资源会失效,要重新写addResourceHandlers()方法
*
* @Override protected void addResourceHandlers(ResourceHandlerRegistry registry) {
* super.addResourceHandlers(registry);
* //classpath:可省略
* registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");
* registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/ ");
* }
* <p>
* 原因:在WebMvcAutoConfiguration自动配置类的注解中,
* @ConditionalOnMissingBean({WebMvcConfigurationSupport.class})的意思是, 如果容器中没有这个类,自动配置才生效;如果有,那么自动配置类就不生效了。
*/
@Configuration
public class ServerWebAppConfigurer implements WebMvcConfigurer {
@Bean
LogInterceptor logInterceptor() {
return new LogInterceptor();
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(logInterceptor()).addPathPatterns("/**");
}
}