| @@ -1,10 +1,14 @@ | |||||
| package com.iformall.interceptor; | package com.iformall.interceptor; | ||||
| import org.slf4j.Logger; | |||||
| import org.slf4j.LoggerFactory; | |||||
| import javax.servlet.*; | import javax.servlet.*; | ||||
| import javax.servlet.http.HttpServletRequest; | import javax.servlet.http.HttpServletRequest; | ||||
| import java.io.IOException; | import java.io.IOException; | ||||
| public class HttpServletRequestWrapperFilter implements Filter { | public class HttpServletRequestWrapperFilter implements Filter { | ||||
| private final Logger logger = LoggerFactory.getLogger(this.getClass()); | |||||
| @Override | @Override | ||||
| public void init(FilterConfig filterConfig) throws ServletException { | public void init(FilterConfig filterConfig) throws ServletException { | ||||
| @@ -13,7 +17,8 @@ public class HttpServletRequestWrapperFilter implements Filter { | |||||
| @Override | @Override | ||||
| public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) | public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) | ||||
| throws IOException, ServletException { | throws IOException, ServletException { | ||||
| logger.debug("doFilter start"); | |||||
| long start = System.currentTimeMillis(); | |||||
| ServletRequest requestWrapper = null; | ServletRequest requestWrapper = null; | ||||
| if (request instanceof HttpServletRequest) { | if (request instanceof HttpServletRequest) { | ||||
| requestWrapper = new BodyReaderHttpServletRequestWrapper((HttpServletRequest) request); | requestWrapper = new BodyReaderHttpServletRequestWrapper((HttpServletRequest) request); | ||||
| @@ -23,7 +28,7 @@ public class HttpServletRequestWrapperFilter implements Filter { | |||||
| } else { | } else { | ||||
| chain.doFilter(requestWrapper, response); | chain.doFilter(requestWrapper, response); | ||||
| } | } | ||||
| logger.debug("doFilter end" + (System.currentTimeMillis()- start)); | |||||
| } | } | ||||
| @Override | @Override | ||||
| @@ -34,8 +34,10 @@ public class RequestInterceptor extends HandlerInterceptorAdapter { | |||||
| @Override | @Override | ||||
| public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { | public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { | ||||
| logger.debug("preHandle start"); | |||||
| if ("GET".equalsIgnoreCase(request.getMethod())) { | if ("GET".equalsIgnoreCase(request.getMethod())) { | ||||
| // 获取不检查幂等 | // 获取不检查幂等 | ||||
| logger.debug("preHandle start 1"); | |||||
| return true; | return true; | ||||
| } | } | ||||
| StringBuilder sb = new StringBuilder(); | StringBuilder sb = new StringBuilder(); | ||||
| @@ -73,19 +75,21 @@ public class RequestInterceptor extends HandlerInterceptorAdapter { | |||||
| if (redisTemplate.opsForValue().setIfAbsent(key, key)) { | if (redisTemplate.opsForValue().setIfAbsent(key, key)) { | ||||
| redisTemplate.expire(key, 3, TimeUnit.SECONDS); | redisTemplate.expire(key, 3, TimeUnit.SECONDS); | ||||
| logger.info(key + ": 第一次提交"); | logger.info(key + ": 第一次提交"); | ||||
| logger.debug("preHandle start 2"); | |||||
| return true; | return true; | ||||
| } | } | ||||
| logger.info(key + ": 第二次提交"); | logger.info(key + ": 第二次提交"); | ||||
| logger.debug("preHandle start 3"); | |||||
| return false; | return false; | ||||
| } | } | ||||
| @Override | @Override | ||||
| public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { | public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { | ||||
| logger.debug("postHandle"); | |||||
| } | } | ||||
| @Override | @Override | ||||
| public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { | 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 .."); | |||||
| } | |||||
| } | |||||