创建注解类
import java.lang.annotation.*; @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface SysLog { String value() default ""; }
创建拦截器
import com.alibaba.dubbo.config.annotation.Reference; import com.rz.common.annotation.AuthToken; import com.rz.common.annotation.SysLog; import com.rz.common.ex.BusinessException; import com.rz.entity.po.Employees; import com.rz.entity.po.Logs; import com.rz.service.ILogsService; import com.rz.utils.Constant; import org.apache.commons.lang3.StringUtils; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; import org.springframework.web.method.HandlerMethod; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.lang.reflect.Method; import java.util.Date; @Component public class LogInterceptor implements HandlerInterceptor { private Logger logger = Logger.getLogger(getClass()); private ThreadLocal<Long> startTime = new ThreadLocal<>(); @Reference(version = "1.0.0") private ILogsService ilogService; @Autowired RedisTemplate redisTemplate; public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws BusinessException { if (!(handler instanceof HandlerMethod)) { return true; } HandlerMethod handlerMethod = (HandlerMethod) handler; Method method = handlerMethod.getMethod(); String token = request.getParameter(Constant.USER_TOKEN); String originTypeStr = request.getParameter(Constant.ORIGIN_TYPE); Integer originType = Integer.parseInt(StringUtils.isNotEmpty(originTypeStr)?originTypeStr:"4"); Employees employees=(Employees)redisTemplate.opsForValue().get(token); SysLog sysLog = method.getAnnotation(SysLog.class); // 记录下请求内容 if (sysLog != null || handlerMethod.getBeanType().getAnnotation(SysLog.class) != null) { Logs log = new Logs(); //设置日志类型 log.setLogType(originType); //设置日志等级 log.setLogLevel(3); //设置日志时间 log.setLogTime(new Date()); //设置访问IP log.setSourceIp(request.getRemoteAddr()); //设置操作人 log.setOperatorId(employees==null?null:employees.getEmployeeId()); //设置日志文本信息 log.setLogtxt(sysLog.value()+"-"+request.getRequestURL().toString()); ilogService.insert(log); } 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 { } }
配置
import com.rz.handler.LogInterceptor; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import javax.annotation.Resource; @Configuration public class WebAppConfig extends WebMvcConfigurerAdapter { @Resource private LogInterceptor logInterceptor; @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(logInterceptor).addPathPatterns("/**"); } }
使用