Helius
2021-06-16 5728be2af515b2200e782aa201ca5d4d67d9ea47
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
package com.ibeetl.admin.core.util;
 
import java.net.InetAddress;
import java.net.UnknownHostException;
 
import javax.servlet.http.HttpServletRequest;
 
import org.springframework.stereotype.Component;
 
import com.ibeetl.admin.core.conf.MVCConf;
 
/**
 *  保留用户会话,以方便在业务代码任何地方调用
 *  {@link MVCConf}
 * @author lijiazhi
 *
 */
@Component
public class HttpRequestLocal {
    
    public  HttpRequestLocal(){
        
    }
    
      private static final ThreadLocal<HttpServletRequest> requests =
                 new ThreadLocal<HttpServletRequest>() {
                     @Override protected HttpServletRequest initialValue() {
                         return null;
                 }
             };
             
     public  Object getSessionValue(String attr){
         return  requests.get().getSession().getAttribute(attr);
     }
     
     public  void setSessionValue(String attr,Object obj){
           requests.get().getSession().setAttribute(attr,obj);
     }
     
     
     
     public  Object getRequestValue(String attr){
         return  requests.get().getAttribute(attr);
     }
     
     public String getRequestURI(){
         return  requests.get().getRequestURI();
     }
     
     public String getRequestIP(){
         return getIpAddr(requests.get());
     }
     
     public  void set(HttpServletRequest request){
         requests.set(request);
     }
     
     /** 
         * 获取当前网络ip 
         * @param request 
         * @return 
         */  
        public 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 (UnknownHostException 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;   
        }
}