|  | @ -0,0 +1,100 @@
 | 
	
		
			
				|  |  | package com.yihu.hos.interceptor;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | import com.fasterxml.jackson.core.JsonProcessingException;
 | 
	
		
			
				|  |  | import com.fasterxml.jackson.databind.ObjectMapper;
 | 
	
		
			
				|  |  | import com.fasterxml.jackson.databind.node.ObjectNode;
 | 
	
		
			
				|  |  | import com.yihu.hos.common.HosAdminLogger;
 | 
	
		
			
				|  |  | import com.yihu.hos.common.constants.ContextAttributes;
 | 
	
		
			
				|  |  | import com.yihu.hos.system.model.SystemUser;
 | 
	
		
			
				|  |  | import org.aspectj.lang.JoinPoint;
 | 
	
		
			
				|  |  | import org.aspectj.lang.ProceedingJoinPoint;
 | 
	
		
			
				|  |  | import org.aspectj.lang.annotation.After;
 | 
	
		
			
				|  |  | import org.aspectj.lang.annotation.Around;
 | 
	
		
			
				|  |  | import org.aspectj.lang.annotation.Aspect;
 | 
	
		
			
				|  |  | import org.aspectj.lang.annotation.Before;
 | 
	
		
			
				|  |  | import org.slf4j.Logger;
 | 
	
		
			
				|  |  | import org.slf4j.LoggerFactory;
 | 
	
		
			
				|  |  | import org.springframework.beans.factory.annotation.Autowired;
 | 
	
		
			
				|  |  | 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 javax.servlet.http.HttpServletResponse;
 | 
	
		
			
				|  |  | import javax.servlet.http.HttpSession;
 | 
	
		
			
				|  |  | import java.util.HashMap;
 | 
	
		
			
				|  |  | import java.util.Map;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | /**
 | 
	
		
			
				|  |  |  * 记录数据交换平台业务请求的日志
 | 
	
		
			
				|  |  |  *
 | 
	
		
			
				|  |  |  * @author 张进军
 | 
	
		
			
				|  |  |  * @date 2017.7.6 16::06
 | 
	
		
			
				|  |  |  */
 | 
	
		
			
				|  |  | @Aspect
 | 
	
		
			
				|  |  | @Component
 | 
	
		
			
				|  |  | public class HosAdminLogAspect {
 | 
	
		
			
				|  |  |     private static Logger logger = LoggerFactory.getLogger(HosAdminLogAspect.class);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     private String requestPath; // 请求地址
 | 
	
		
			
				|  |  |     private String operationPath; //操作地址(去掉项目部署名称的地址)
 | 
	
		
			
				|  |  |     private String userName; // 用户名
 | 
	
		
			
				|  |  |     private String function; // 操作页面名称
 | 
	
		
			
				|  |  |     private String operation; // 操作内容(增、删、改、查、导入)
 | 
	
		
			
				|  |  |     private Map<?, ?> inputParamMap = null; // 传入参数
 | 
	
		
			
				|  |  |     private Map<String, Object> outputParamMap = null; // 输出结果
 | 
	
		
			
				|  |  |     private long startTimeMillis = 0; // 开始时间
 | 
	
		
			
				|  |  |     private long endTimeMillis = 0; // 结束时间
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     @Autowired
 | 
	
		
			
				|  |  |     private ObjectMapper objectMapper;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     @Before("execution(* com.yihu.hos.*.controller..*.*(..))")
 | 
	
		
			
				|  |  |     public void doBeforeInServiceLayer(JoinPoint joinPoint) {
 | 
	
		
			
				|  |  |         startTimeMillis = System.currentTimeMillis();
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     @After("execution(* com.yihu.hos.*.controller..*.*(..))")
 | 
	
		
			
				|  |  |     public void doAfterInServiceLayer(JoinPoint joinPoint) throws JsonProcessingException {
 | 
	
		
			
				|  |  |         endTimeMillis = System.currentTimeMillis();
 | 
	
		
			
				|  |  |         // 记录请求日志
 | 
	
		
			
				|  |  |         this.recordLog();
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     @Around("execution(* com.yihu.hos.*.controller..*.*(..))")
 | 
	
		
			
				|  |  |     public Object doAround(ProceedingJoinPoint pjp) throws Throwable {
 | 
	
		
			
				|  |  |         HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
 | 
	
		
			
				|  |  |         operationPath = request.getServletPath();
 | 
	
		
			
				|  |  |         inputParamMap = request.getParameterMap();
 | 
	
		
			
				|  |  |         requestPath = request.getRequestURL().toString();
 | 
	
		
			
				|  |  |         Object result = pjp.proceed();
 | 
	
		
			
				|  |  |         outputParamMap = new HashMap<String, Object>();
 | 
	
		
			
				|  |  |         outputParamMap.put("result", result);
 | 
	
		
			
				|  |  |         return result;
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 记录请求日志
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     private void recordLog() throws JsonProcessingException {
 | 
	
		
			
				|  |  |         HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
 | 
	
		
			
				|  |  |         HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();
 | 
	
		
			
				|  |  |         HttpSession session = request.getSession();
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         SystemUser systemUser = (SystemUser) session.getAttribute(ContextAttributes.USER_INFO);
 | 
	
		
			
				|  |  |         String loginCode = systemUser == null ? "" : systemUser.getLoginCode();
 | 
	
		
			
				|  |  |         String userName = systemUser == null ? "" : systemUser.getUserName();
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         ObjectNode data = objectMapper.createObjectNode();
 | 
	
		
			
				|  |  |         data.put("patient", userName); // 调用者
 | 
	
		
			
				|  |  |         data.put("url", requestPath); // 调用的控制器路径
 | 
	
		
			
				|  |  |         data.put("responseTime", endTimeMillis - startTimeMillis); // 响应时长
 | 
	
		
			
				|  |  |         data.put("responseCode", response.getStatus()); // 响应状态
 | 
	
		
			
				|  |  |         data.put("response", objectMapper.writeValueAsString(outputParamMap)); // 请求返回的结果
 | 
	
		
			
				|  |  |         data.put("appKey", "ESB"); // 应用名称:共享交换平台
 | 
	
		
			
				|  |  |         data.put("param", objectMapper.writeValueAsString(inputParamMap)); // 请求传递的参数
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         HosAdminLogger.info(loginCode, data);
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | }
 |