三種方式實現限制IP訪問
阿新 • • 發佈:2019-02-01
方式一:Linux防火牆實現
#阻止所有IP訪問
iptables -A INPUT -s 0.0.0.0/0 -p tcp --dport 80 -j DROP
#然後再新增白名單
iptables -A INPUT -s 1.2.3.4 -p tcp --dport 80 -j ACCEPT
###############或者###########
iptables -A INPUT -s 2.3.4.5 -p tcp -j ACCEPT
方式二:nginx配置實現
##對應的location新增指定規則 location / { allow 132.23.22.185; deny all; }
方式三:程式碼實現
//寫一個攔截器 繼承HandlerInterceptorAdapter ,覆蓋preHandler方法,,然後註冊該攔截器即可進行限制 //getRemoteAddr獲取地址:本機用localhost獲取的是0:0:0:0:0:0:0:1,用127.0.0.1進行訪問,獲取的就是127.0.0.1 //用真實IP獲取的就是真實IP private String getRemoteIp(HttpServletRequest request) { //只有通過了負載均衡或者HTTP代理才會新增該項 String ip = request.getHeader("x-forwarded-for"); //apache伺服器才有這個請求頭 if(StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("Proxy-Client-IP"); } //weblogic有這個請求頭 if(StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("WL-Proxy-Client-IP"); } //nginx代理有這個請求頭 if(StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("X-Real-IP"); } if(StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) { ip = request.getRemoteAddr(); } return ip; }