Browse Source

Merge branch 'dev' of trick9191/wlyy2.0 into dev

trick9191 5 years ago
parent
commit
db54804f29

+ 2 - 2
gateway/ag-basic/src/main/java/com/yihu/jw/gateway/filter/BasicZuulFilter.java

@ -3,7 +3,7 @@ package com.yihu.jw.gateway.filter;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.yihu.jw.gateway.log.service.BaseMethodLogService;
import com.yihu.jw.gateway.methlog.BaseMethodLogService;
import com.yihu.jw.restmodel.ResultStatus;
import com.yihu.jw.restmodel.web.Envelop;
import org.slf4j.Logger;
@ -30,7 +30,7 @@ import java.util.Enumeration;
import java.util.Iterator;
/**
 * Created by progr1mmer on 2017/12/27
 * Created by progr1mmer on 2017/12/27.
 */
@Component
public class BasicZuulFilter extends ZuulFilter {

+ 61 - 0
gateway/ag-basic/src/main/java/com/yihu/jw/gateway/methlog/BaseMethodLogDO.java

@ -0,0 +1,61 @@
package com.yihu.jw.gateway.methlog;
import com.yihu.jw.entity.UuidIdentityEntity;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.util.Date;
/**
 * Created by Trick on 2020/2/19.
 */
@Entity
@Table(name = "base_method_log")
public class BaseMethodLogDO extends UuidIdentityEntity {
    private String uuid;
    private String name;
    private String ip;
    private String method;
    private Date createTime;
    public String getUuid() {
        return uuid;
    }
    public void setUuid(String uuid) {
        this.uuid = uuid;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getIp() {
        return ip;
    }
    public void setIp(String ip) {
        this.ip = ip;
    }
    public String getMethod() {
        return method;
    }
    public void setMethod(String method) {
        this.method = method;
    }
    public Date getCreateTime() {
        return createTime;
    }
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
}

+ 10 - 0
gateway/ag-basic/src/main/java/com/yihu/jw/gateway/methlog/BaseMethodLogDao.java

@ -0,0 +1,10 @@
package com.yihu.jw.gateway.methlog;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;
/**
 * Created by Trick on 2020/2/19.
 */
public interface BaseMethodLogDao extends PagingAndSortingRepository<BaseMethodLogDO, String>, JpaSpecificationExecutor<BaseMethodLogDO> {
}

+ 88 - 0
gateway/ag-basic/src/main/java/com/yihu/jw/gateway/methlog/BaseMethodLogService.java

@ -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;
    }
}