当前位置: 代码迷 >> 综合 >> springboot 拦截器的实现
  详细解决方案

springboot 拦截器的实现

热度:52   发布时间:2024-02-23 02:50:12.0

第一步:自定义拦截器

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;/*** 拦截器* Create by Jaffar on 2017/9/26 9:55.*/
public class LogInterceptor implements HandlerInterceptor {private static final Logger LOGGER = LoggerFactory.getLogger(LogInterceptor.class);@Overridepublic 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;}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {}@Overridepublic 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 {@BeanLogInterceptor logInterceptor() {return new LogInterceptor();}@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(logInterceptor()).addPathPatterns("/**");}
}