| 
					
				 | 
			
			
				@ -0,0 +1,88 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				package com.yihu.jw.gateway.methlog; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.gateway.log.dao.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.gateway.log.entity.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.gateway.useragent.UserAgent; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.slf4j.Logger; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.slf4j.LoggerFactory; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.beans.factory.annotation.Autowired; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.stereotype.Service; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.transaction.annotation.Transactional; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import javax.servlet.http.HttpServletRequest; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import java.net.InetAddress; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import java.net.UnknownHostException; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import java.util.Date; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * Created by Trick on 2020/2/19. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				@Service 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				@Transactional 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				public class BaseMethodLogService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private static final Logger logger = LoggerFactory.getLogger(com.yihu.jw.gateway.log.service.BaseMethodLogService.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private com.yihu.jw.gateway.log.dao.BaseMethodLogDao baseMethodLogDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private UserAgent userAgent; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 存储操作日志 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public void saveMethodLog(HttpServletRequest request){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        try{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            logger.info("saveMethodLog"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            com.yihu.jw.gateway.log.entity.BaseMethodLogDO log = new com.yihu.jw.gateway.log.entity.BaseMethodLogDO(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            log.setUuid(userAgent.getUID()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            log.setName(userAgent.getUNAME()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            log.setIp(getIpAddress(request)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            log.setCreateTime(new Date()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            log.setMethod(request.getRequestURI()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            baseMethodLogDao.save(log); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            logger.info("saveMethodLog success"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        }catch (Exception e){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            logger.info("saveMethodLog error"+e.toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 获取用户真实IP地址,不使用request.getRemoteAddr();的原因是有可能用户使用了代理软件方式避免真实IP地址。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 可是,如果通过了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP值,究竟哪个才是真正的用户端的真实IP呢? 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 答案是取X-Forwarded-For中第一个非unknown的有效IP字符串 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param request 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private String getIpAddress(HttpServletRequest request) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String ip = request.getHeader("x-forwarded-for"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            ip = request.getHeader("Proxy-Client-IP"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            ip = request.getHeader("WL-Proxy-Client-IP"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            ip = request.getHeader("HTTP_CLIENT_IP"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            ip = request.getHeader("HTTP_X_FORWARDED_FOR"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            ip = request.getRemoteAddr(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if("127.0.0.1".equals(ip)||"0:0:0:0:0:0:0:1".equals(ip)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                //根据网卡取本机配置的IP 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                InetAddress inet=null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    inet = InetAddress.getLocalHost(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } catch (UnknownHostException e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    e.printStackTrace(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                ip= inet.getHostAddress(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return ip; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				} 
			 |