|
@@ -4,24 +4,60 @@ import com.dragoninfo.dcuc.common.Constants;
|
|
|
import com.dragonsoft.duceap.commons.util.ip.IpUtils;
|
|
|
import feign.RequestInterceptor;
|
|
|
import feign.RequestTemplate;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.web.context.request.RequestContextHolder;
|
|
|
import org.springframework.web.context.request.ServletRequestAttributes;
|
|
|
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
+import java.net.InetAddress;
|
|
|
|
|
|
/**
|
|
|
* 添加调用到后端的请求头
|
|
|
* @author mazq
|
|
|
* @date 2021/7/29
|
|
|
*/
|
|
|
+@Slf4j
|
|
|
public class FeignHeadInterceptor implements RequestInterceptor {
|
|
|
@Override
|
|
|
public void apply(RequestTemplate template) {
|
|
|
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
|
|
|
if(attributes!=null) {
|
|
|
HttpServletRequest request = attributes.getRequest();
|
|
|
- String realIpAddress = IpUtils.getRealIpAdrress(request);
|
|
|
- template.header(Constants.REAL_IP_ADDRESS_KEY, realIpAddress);
|
|
|
+ String ipAddr = getIpAddr(request);
|
|
|
+ String ipAddress1 = IpUtils.getRealIpAdrress(request);
|
|
|
+ template.header(Constants.REAL_IP_ADDRESS_KEY, ipAddr);
|
|
|
+ log.info("FeignHeadInterceptor ipAddr:{}, ipAddress1:{}", ipAddr, ipAddress1);
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ private String getIpAddr(HttpServletRequest request) {
|
|
|
+ String ipAddress = request.getHeader("x-forwarded-for");
|
|
|
+ if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
|
|
|
+ ipAddress = request.getHeader("Proxy-Client-IP");
|
|
|
+ }
|
|
|
+ if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
|
|
|
+ ipAddress = request.getHeader("WL-Proxy-Client-IP");
|
|
|
+ }
|
|
|
+ if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
|
|
|
+ ipAddress = request.getRemoteAddr();
|
|
|
+ if(ipAddress.equals("127.0.0.1") || ipAddress.equals("0:0:0:0:0:0:0:1")) {
|
|
|
+ //根据网卡取本机配置的IP
|
|
|
+ InetAddress inet=null;
|
|
|
+ try {
|
|
|
+ inet = InetAddress.getLocalHost();
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ ipAddress= inet.getHostAddress();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割
|
|
|
+ if(ipAddress!=null && ipAddress.length()>15) { //"***.***.***.***".length() = 15
|
|
|
+ if(ipAddress.indexOf(",")>0) {
|
|
|
+ ipAddress = ipAddress.substring(0,ipAddress.indexOf(","));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return ipAddress;
|
|
|
+ }
|
|
|
+
|
|
|
}
|