Java如何限制IP访问页面

最近遇到一个需求,一个只能内网访问的网站,需要限制ip访问。就是网站内的部分文章只有白名单内的ip才能打开。因为是静态化的网站,所有文章都是静态html页面。所以首先想到的就是直接js获取访问者ip然后再判断是否在白名单内,不在白名单内就到没有权限页面。

但是JS获取内网Ip还是比较麻烦的,查到几个方法最后试了都不行。

记录下查到的几个方法和最后实现的方法。

JS获取外网ip的方法:

//最简单的获取外网ip的方法。可以直接用,但是没啥用..
<script src="http://pv.sohu.com/cityjson?ie=utf-8"></script>
<script>
 document.write(returnCitySN["cip"]);
</script>

JS获取内网Ip的方法

function getIP(callback) {
  let recode = {};
  let RTCPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection;
  // 如果不存在则使用一个iframe绕过
  if (!RTCPeerConnection) {
   // 因为这里用到了iframe,所以在调用这个方法的script上必须有一个iframe标签
   // <iframe id="iframe" sandbox="allow-same-origin" style="display:none;"></iframe>
   let win = iframe.contentWindow;
   RTCPeerConnection = win.RTCPeerConnection || win.mozRTCPeerConnection || win.webkitRTCPeerConnection;
  }

  //创建实例,生成连接
  let pc = new RTCPeerConnection();

  // 匹配字符串中符合ip地址的字段
  function handleCandidate(candidate) {
  debugger;
   let ip_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}))/;
   let ip_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(() => {
   let lines = 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方法:

 String ip = 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访问的资料请关注我们其它相关文章!

(0)

相关推荐

  • 详解Java Web如何限制访问的IP的两种方法

    前一阵子因为在做项目时碰到了这个功能,现在好好总结一下,至于为什么要限制IP访问,我就不多说了.然后百度了一下,现在主要有两种方式去限制IP访问,第一种是最简单的方便的,第二种是通过过滤器来限制访问.下面我简单介绍一下第一种方式,着重介绍第二种. 第一种方式(Tomcat配置项配置允许或限制IP访问) 这种是最简单的快捷的,主要就涉及Tomcat的server.xml配置. 第一步:找到server.xml文件在哪,在Tomcat的目录下的conf文件夹下. 第二步:打开server.xml文件

  • Java 限制子类访问的方法分析

    本文实例讲述了Java 限制子类访问的方法.分享给大家供大家参考,具体如下: 一 点睛 有时候,父类想保护自己的"隐私",即使自己的成员被子类继承了,并不希望子类可以访问自己类中全部的属性或方法,这时,就需要将一些属性与方法隐藏起来,不让子类去使用.此时可在声明属性或方法时加上"private"关键字,表示私有访问权限,即除了声明该属性或方法所在类,其他外部类(包括子类)均无权访问. 二 实战--限制子类的访问 1 代码 class Person { // 在这里将

  • Java如何限制IP访问页面

    最近遇到一个需求,一个只能内网访问的网站,需要限制ip访问.就是网站内的部分文章只有白名单内的ip才能打开.因为是静态化的网站,所有文章都是静态html页面.所以首先想到的就是直接js获取访问者ip然后再判断是否在白名单内,不在白名单内就到没有权限页面. 但是JS获取内网Ip还是比较麻烦的,查到几个方法最后试了都不行. 记录下查到的几个方法和最后实现的方法. JS获取外网ip的方法: //最简单的获取外网ip的方法.可以直接用,但是没啥用.. <script src="http://pv.

  • Nginx限制IP访问某些页面的操作

    1.要禁止所有IP访问a1.htm a2.htm a3.htm这个三个页面在location可以这样写 location ~* /(a1.htm|a2.htm|a3.htm)$ { deny all; condition---; } 2.只允许指定的ip访问a1.htm a2.htm a3.htm这个三个页面,其他IP的访问都拒绝 location ~* /(a1.htm|a2.htm|a3.htm)$ { allow 10.0.0.2; deny all; condition---; } 这种

  • 关于Flask项目无法使用公网IP访问的解决方式

    最近在折腾Python Web,在测试的时候发现,本机可以正常访问,但外网无法通过公网IP访问页面.经过各种搜索,有大致三种解决方案. 一.修改/添加安全组端口 这是第一种方案,也是能解决大部分问题的一个方案. 由于我的服务器是阿里云的,所以在阿里云的ECS云服务器控制台中,管理安全组,添加5000和8000端口以便测试. 经过测试,外网依旧无法访问.失败-- 二.配置/关闭防火墙 由于我的服务器是Windows Server 2016 操作系统,经过提醒,考虑是否是防火墙未允许端口通过. 如图

  • Java项目中如何访问WEB-INF下jsp页面

    Java小项目中WEB-INF下jsp页面如何访问 一:一般为啥要把jsp页面放在WEB-INF呐? 这样主要是为了网站的安全的角度来说的,WEB-INF是安全目录Tomcat 默认的访问路径是WebRoot下的index.jsp,放在WEB-INF下的页面一般不配置是无法访问的. 你的站点肯定有些页面是需要经过登录验证或其他验证后才能访问的啊,这些页面就放在web-inf里. 如果是能不经过验证就访问的页面,比如主页.登录页.欢迎页这种,就不要放在web-inf里  二: 下面来看如何访问We

  • 外贸网站屏蔽中国IP访问的多种方法

    大家都知道的原因,做外贸站,国人喜欢研究你的站,还总是帮你进行压力测试-- 首先想到要屏蔽中国IP就会是把中国IP库加入Nginx配置文件中,然后WEB服务器对比IP来达到屏蔽. 复制代码 代码如下: 在Nginx中加deny IP; 批量可以建立一个ip.conf的文件然后include ip.conf; 其次是通过IPtable要禁止中国IP段来达到屏蔽的目的. 以下是Iptable的Sh脚本: 复制代码 代码如下: #!/bin/bash # Block traffic from a sp

  • Java Web开发之访问路径问题分析

    本文实例讲述了Java Web开发之访问路径问题.分享给大家供大家参考.具体如下: Web应用是由大量的文件组成的,系统等运行主要是靠文件之间的相互调用来完成,调用就是根据文件的位置来确定的.如果你在访问某个文件的时候,系统报下面这样的错误,如果你的文件名没有写错,就是路径出错了. 为了说明路径问题,我们假设有以下的文档结构: 这是JBuilder2006下的一个截图,应用的名字是filepathweb,有两个文件夹,aa和bb,其中aa下有a_a.jsp和a_b.jsp两个文件,bb下有b_a

  • ASP.net做的IP访问限制

    偶做留言本的时候想起做这么个,具体思路也许不好,做出来只是抛砖引玉,希望有更好的方法! IP添加页是用了一个ListBox, TextBox,两个Button,而在其他的页上则直接用当前IP对比数据库中的IP,代码如下! 限制IP添加页HTML代码 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="ip.aspx.cs" Inherits="admin_ip"

  • PHP禁止个别IP访问网站

    想不让某个IP访问网站,可以封他的IP,下面就提供这个方法.看下面的代码. 复制代码 代码如下: function get_ip_data(){       $ip=file_get_contents("http://ip.taobao.com/service/getIpInfo.php?ip=".get_client_ip());    $ip = json_decode($ip);    if($ip->code){        return false;    }   

  • PHP实现限制IP访问及提交次数的方法详解

    本文实例讲述了PHP实现限制IP访问及提交次数的方法.分享给大家供大家参考,具体如下: 一.原理 提交次数是肯定要往数据库里写次数这个数据的,比如用户登陆,当用户出错时就忘数据库写入出错次数1,并且出错时间,再出错写2,当满比如5次时提示不允许再登陆,请明天再试,然后用DateDiff计算出错时和now()的时间,如果大于24就再开放让他试. 封IP的话特别是给IP断就比较简单了, 先说给IP段开放的情况:先取出客户访问的IP,为了解释方便,设有IP192.168.6.2 现要开放IP段为192

随机推荐