最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java如何限制IP訪問頁面

 更新時間:2020年09月17日 09:56:14   作者:ZJ  
這篇文章主要介紹了Java如何限制IP訪問頁面,幫助大家完成需求,實現(xiàn)白名單,感興趣的朋友可以了解下

最近遇到一個需求,一個只能內(nèi)網(wǎng)訪問的網(wǎng)站,需要限制ip訪問。就是網(wǎng)站內(nèi)的部分文章只有白名單內(nèi)的ip才能打開。因為是靜態(tài)化的網(wǎng)站,所有文章都是靜態(tài)html頁面。所以首先想到的就是直接js獲取訪問者ip然后再判斷是否在白名單內(nèi),不在白名單內(nèi)就到?jīng)]有權限頁面。

但是JS獲取內(nèi)網(wǎng)Ip還是比較麻煩的,查到幾個方法最后試了都不行。

記錄下查到的幾個方法和最后實現(xiàn)的方法。

JS獲取外網(wǎng)ip的方法:

//最簡單的獲取外網(wǎng)ip的方法。可以直接用,但是沒啥用..
<script src="http://pv.sohu.com/cityjson?ie=utf-8"></script>
<script>
 document.write(returnCitySN["cip"]);
</script>

JS獲取內(nèi)網(wǎng)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;
  }
 
  //創(chuàng)建實例,生成連接
  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;
   }
  }
 
  //監(jiān)聽icecandidate事件
  pc.onicecandidate = (ice) => {
   if (ice.candidate) {
    handleCandidate(ice.candidate.candidate);
   }
  };
  //建立一個偽數(shù)據(jù)的通道
  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獲取真實內(nèi)網(wǎng)Ip,WebRTC是一個支持網(wǎng)頁瀏覽器進行實時語音對話或視頻對話的API

由于WebRTC在建立連接過程中,會向對方發(fā)送本地地址SDP,因此可以通過訪問SDP獲得訪問者的IP

但是有些瀏覽器用不了,所以還是放棄這種方式了。

最后還是覺得用Java來實現(xiàn)比較好吧,前端文章頁寫個ajax,每次進入文章先判斷文章是否需要限制IP訪問,如果需要就請求下后端,后端獲取Ip判斷是否在白名單內(nèi)。注意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);

以上方法均來自網(wǎng)絡,親測有效,記錄于此。

以上就是Java如何限制IP訪問頁面的詳細內(nèi)容,更多關于Java限制IP訪問的資料請關注腳本之家其它相關文章!

相關文章

  • Spring MVC之mvc:resources如何處理靜態(tài)資源

    Spring MVC之mvc:resources如何處理靜態(tài)資源

    這篇文章主要介紹了Spring MVC之mvc:resources如何處理靜態(tài)資源問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • 解決rocketmq-spring-boot-starter導致的多消費者實例重復消費問題

    解決rocketmq-spring-boot-starter導致的多消費者實例重復消費問題

    這篇文章主要介紹了解決rocketmq-spring-boot-starter導致的多消費者實例重復消費問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • SpringBoot整合RabbitMQ實現(xiàn)交換機與隊列的綁定

    SpringBoot整合RabbitMQ實現(xiàn)交換機與隊列的綁定

    這篇文章將通過幾個實例為大家介紹一些SpringBoot中RabbitMQ如何綁定交換機(交換器)與隊列,文中的示例代碼講解詳細,感興趣的可以了解一下
    2022-05-05
  • java 打印一字符串,并在main()方法內(nèi)調用它

    java 打印一字符串,并在main()方法內(nèi)調用它

    編寫一個方法(名字自定,但要符合Java編碼規(guī)范),方法內(nèi)打印一字符串,并在main()方法內(nèi)調用它。
    2017-02-02
  • Jpa中Specification的求和sum不生效原理分析

    Jpa中Specification的求和sum不生效原理分析

    這篇文章主要為大家介紹了Jpa中Specification的求和sum不生效原理示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • Java中Arraylist的最大長度

    Java中Arraylist的最大長度

    這篇文章主要介紹了Java中Arraylist的最大長度,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Java使用正則表達式獲取子文本的方法示例

    Java使用正則表達式獲取子文本的方法示例

    這篇文章主要介紹了Java使用正則表達式獲取子文本的方法,結合實例形式分析了java針對子文本的正則操作相關函數(shù)與使用技巧,需要的朋友可以參考下
    2017-09-09
  • Java中equals()方法的理解與使用方法例子

    Java中equals()方法的理解與使用方法例子

    本文主要介紹了Java中的equals()方法,equals()方法是Object類的方法,用于比較兩個對象是否相等,文中通過代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2024-10-10
  • SpringBoot中的Future接口詳解

    SpringBoot中的Future接口詳解

    這篇文章主要介紹了SpringBoot中的Future接口詳解,在異步編程中,我們通常需要處理一些耗時的操作,一種常見的做法是使用 Future 接口來代表一個異步操作的結果,需要的朋友可以參考下
    2023-07-07
  • java實現(xiàn)微信紅包 拼手氣紅包

    java實現(xiàn)微信紅包 拼手氣紅包

    這篇文章主要為大家詳細介紹了java實現(xiàn)微信紅包,拼手氣紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-11-11

最新評論

光山县| 东至县| 聊城市| 石阡县| 满洲里市| 陆川县| 荆州市| 来凤县| 安阳县| 原平市| 兰州市| 吐鲁番市| 深水埗区| 新疆| 墨玉县| 嘉禾县| 江山市| 阜宁县| 曲周县| 孝感市| 陈巴尔虎旗| 海门市| 浦东新区| 高邑县| 株洲县| 讷河市| 湾仔区| 崇阳县| 湖州市| 玛沁县| 绍兴县| 延川县| 奉化市| 阿坝| 阳西县| 东光县| 六安市| 双峰县| 江源县| 吉安市| 西安市|