Java如何限制IP访问页面
最近遇到一个需求,一个只能内网访问的网站,需要限制ip访问。就是网站内的部分文章只有白名单内的ip才能打开。因为是静态化的网站,所有文章都是静态html页面。所以首先想到的就是直接js获取访问者ip然后再判断是否在白名单内,不在白名单内就到没有权限页面。
但是JS获取内网Ip还是比较麻烦的,查到几个方法最后试了都不行。
记录下查到的几个方法和最后实现的方法。
JS获取外网ip的方法:
//最简单的获取外网ip的方法。可以直接用,但是没啥用..
JS获取内网Ip的方法:
functiongetIP(callback){ letrecode={}; letRTCPeerConnection=window.RTCPeerConnection||window.mozRTCPeerConnection||window.webkitRTCPeerConnection; //如果不存在则使用一个iframe绕过 if(!RTCPeerConnection){ //因为这里用到了iframe,所以在调用这个方法的script上必须有一个iframe标签 //letwin=iframe.contentWindow; RTCPeerConnection=win.RTCPeerConnection||win.mozRTCPeerConnection||win.webkitRTCPeerConnection; } //创建实例,生成连接 letpc=newRTCPeerConnection(); //匹配字符串中符合ip地址的字段 functionhandleCandidate(candidate){ debugger; letip_regexp=/([0-9]{1,3}(\.[0-9]{1,3}){3}|([a-f0-9]{1,4}((:[a-f0-9]{1,4}){7}|:+[a-f0-9]{1,4}){6}))/; letip_isMatch=candidate.match(ip_regexp)[1]; if(!recode[ip_isMatch]){ callback(ip_isMatch); recode[ip_isMatch]=true; } } //监听icecandidate事件 pc.onicecandidate=(ice)=>{ if(ice.candidate){ handleCandidate(ice.candidate.candidate); } }; //建立一个伪数据的通道 pc.createDataChannel(''); pc.createOffer((res)=>{ pc.setLocalDescription(res); },()=>{}); //延迟,让一切都能完成 setTimeout(()=>{ letlines=pc.localDescription.sdp.split('\n'); lines.forEach(item=>{ if(item.indexOf('a=candidate:')===0){ handleCandidate(item); } }) },1000); } getIP(function(ip){alert(ip);});
利用WebRTC获取真实内网Ip,WebRTC是一个支持网页浏览器进行实时语音对话或视频对话的API
由于WebRTC在建立连接过程中,会向对方发送本地地址SDP,因此可以通过访问SDP获得访问者的IP
但是有些浏览器用不了,所以还是放弃这种方式了。
最后还是觉得用Java来实现比较好吧,前端文章页写个ajax,每次进入文章先判断文章是否需要限制IP访问,如果需要就请求下后端,后端获取Ip判断是否在白名单内。注意ajax要用同步。
Java获取访问者Ip方法:
Stringip=request.getHeader("x-forwarded-for"); if(ip==null||ip.length()==0||"nuknown".equalsIgnoreCase(ip)){ ip=request.getHeader("Proxy-Client-IP"); } if(ip==null||ip.length()==0||"nuknown".equalsIgnoreCase(ip)){ ip=request.getHeader("WL-Proxy-Client-IP"); } if(ip==null||ip.length()==0||"nuknown".equalsIgnoreCase(ip)){ ip=request.getRemoteAddr(); } System.out.println(ip);
以上方法均来自网络,亲测有效,记录于此。
以上就是Java如何限制IP访问页面的详细内容,更多关于Java限制IP访问的资料请关注毛票票其它相关文章!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。