| @@ -1,10 +1,14 @@ | |||
| package com.iformall.interceptor; | |||
| import org.slf4j.Logger; | |||
| import org.slf4j.LoggerFactory; | |||
| import javax.servlet.*; | |||
| import javax.servlet.http.HttpServletRequest; | |||
| import java.io.IOException; | |||
| public class HttpServletRequestWrapperFilter implements Filter { | |||
| private final Logger logger = LoggerFactory.getLogger(this.getClass()); | |||
| @Override | |||
| public void init(FilterConfig filterConfig) throws ServletException { | |||
| @@ -13,7 +17,8 @@ public class HttpServletRequestWrapperFilter implements Filter { | |||
| @Override | |||
| public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) | |||
| throws IOException, ServletException { | |||
| logger.debug("doFilter start"); | |||
| long start = System.currentTimeMillis(); | |||
| ServletRequest requestWrapper = null; | |||
| if (request instanceof HttpServletRequest) { | |||
| requestWrapper = new BodyReaderHttpServletRequestWrapper((HttpServletRequest) request); | |||
| @@ -23,7 +28,7 @@ public class HttpServletRequestWrapperFilter implements Filter { | |||
| } else { | |||
| chain.doFilter(requestWrapper, response); | |||
| } | |||
| logger.debug("doFilter end" + (System.currentTimeMillis()- start)); | |||
| } | |||
| @Override | |||
| @@ -34,8 +34,10 @@ public class RequestInterceptor extends HandlerInterceptorAdapter { | |||
| @Override | |||
| public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { | |||
| logger.debug("preHandle start"); | |||
| if ("GET".equalsIgnoreCase(request.getMethod())) { | |||
| // 获取不检查幂等 | |||
| logger.debug("preHandle start 1"); | |||
| return true; | |||
| } | |||
| StringBuilder sb = new StringBuilder(); | |||
| @@ -73,19 +75,21 @@ public class RequestInterceptor extends HandlerInterceptorAdapter { | |||
| if (redisTemplate.opsForValue().setIfAbsent(key, key)) { | |||
| redisTemplate.expire(key, 3, TimeUnit.SECONDS); | |||
| logger.info(key + ": 第一次提交"); | |||
| logger.debug("preHandle start 2"); | |||
| return true; | |||
| } | |||
| logger.info(key + ": 第二次提交"); | |||
| logger.debug("preHandle start 3"); | |||
| return false; | |||
| } | |||
| @Override | |||
| public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { | |||
| logger.debug("postHandle"); | |||
| } | |||
| @Override | |||
| public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { | |||
| logger.debug("afterCompletion"); | |||
| } | |||
| } | |||
| @@ -0,0 +1,56 @@ | |||
| package com.iformall.interceptor; | |||
| import org.aspectj.lang.JoinPoint; | |||
| import org.aspectj.lang.annotation.AfterReturning; | |||
| import org.aspectj.lang.annotation.Aspect; | |||
| import org.aspectj.lang.annotation.Before; | |||
| import org.aspectj.lang.annotation.Pointcut; | |||
| import org.slf4j.Logger; | |||
| import org.slf4j.LoggerFactory; | |||
| import org.springframework.stereotype.Component; | |||
| import org.springframework.web.context.request.RequestContextHolder; | |||
| import org.springframework.web.context.request.ServletRequestAttributes; | |||
| import javax.servlet.http.HttpServletRequest; | |||
| import java.util.Arrays; | |||
| @Aspect | |||
| @Component | |||
| public class WebLogAspect { | |||
| private final Logger logger = LoggerFactory.getLogger(this.getClass()); | |||
| ThreadLocal<Long> startTime = new ThreadLocal<>(); | |||
| @Pointcut("execution(public * com.iformall.controller..*.*(..))") | |||
| public void webLog() {} | |||
| @Before("webLog()") | |||
| public void doBefore(JoinPoint joinPoint) throws Throwable { | |||
| logger.debug("aspect start"); | |||
| startTime.set(System.currentTimeMillis()); | |||
| // 接收到请求,记录请求内容 | |||
| ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); | |||
| HttpServletRequest request = attributes.getRequest(); | |||
| // 记录下请求内容 | |||
| logger.info("URL : " + request.getRequestURL().toString()); | |||
| logger.info("HTTP_METHOD : " + request.getMethod()); | |||
| logger.info("IP : " + request.getRemoteAddr()); | |||
| logger.info("CLASS_METHOD : " + joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName()); | |||
| logger.info("ARGS : " + Arrays.toString(joinPoint.getArgs())); | |||
| logger.debug("aspect start ..."); | |||
| } | |||
| @AfterReturning(returning = "ret", pointcut = "webLog()") | |||
| public void doAfterReturning(Object ret) throws Throwable { | |||
| logger.debug("aspect after"); | |||
| // 处理完请求,返回内容 | |||
| logger.info("RESPONSE : " + ret); | |||
| logger.info("SPEND TIME : " + (System.currentTimeMillis() - startTime.get())); | |||
| logger.debug("aspect after .."); | |||
| } | |||
| } | |||