医药类网站建设评价汾阳网架公司

web/2025/10/1 6:44:28/文章来源:
医药类网站建设评价,汾阳网架公司,自适应网站教程,自动化发布 iis网站一、本地解析 如果使用本地ip解析的话#xff0c;我们将会借助ip2region#xff0c;该项目维护了一份较为详细的本地ip地址对应表#xff0c;如果为了离线环境的使用#xff0c;需要导入该项目依赖#xff0c;并指定版本#xff0c;不同版本的方法可能存在差异。 d…一、本地解析 如果使用本地ip解析的话我们将会借助ip2region该项目维护了一份较为详细的本地ip地址对应表如果为了离线环境的使用需要导入该项目依赖并指定版本不同版本的方法可能存在差异。 dependencygroupIdorg.lionsoul/groupIdartifactIdip2region/artifactIdversion2.6.3/version /dependency 在使用时需要将xdb文件下载到resources目录下ip2region使用完全基于xdb文件的查询单次查询响应时间在十微秒级别 package com.example.demo.utils;import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import lombok.NoArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.lionsoul.ip2region.xdb.Searcher;import javax.servlet.http.HttpServletRequest; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.ConnectException; import java.net.InetAddress; import java.net.SocketTimeoutException; import java.net.URL; import java.net.URLConnection; import java.net.UnknownHostException; import java.util.ArrayList; import java.util.List;NoArgsConstructor Slf4j public class IPUtil {private static final String UNKNOWN unknown;private static final String IP_URL http://whois.pconline.com.cn/ipJson.jsp;private static ListString internalIpListnew ArrayList();private static byte[] cBuff;{internalIpList.add(192.168.1.105);internalIpList.add(127.0.0.1);}/*** 功能获取IP地址* 使用 Nginx等反向代理软件 则不能通过 request.getRemoteAddr()获取 IP地址* 如果使用了多级反向代理的话X-Forwarded-For的值并不止一个而是一串IP地址* X-Forwarded-For中第一个非 unknown的有效IP字符串则为真实IP地址*/public static String getIp(HttpServletRequest request) {String ip request.getHeader(x-forwarded-for);if (ip null || ip.length() 0 || UNKNOWN.equalsIgnoreCase(ip)) {ip request.getHeader(Proxy-Client-IP);}if (ip null || ip.length() 0 || UNKNOWN.equalsIgnoreCase(ip)) {ip request.getHeader(WL-Proxy-Client-IP);}if (ip null || ip.length() 0 || UNKNOWN.equalsIgnoreCase(ip)) {ip request.getHeader(HTTP_CLIENT_IP);}if (ip null || ip.length() 0 || UNKNOWN.equalsIgnoreCase(ip)) {ip request.getHeader(HTTP_X_FORWARDED_FOR);}if (ip null || ip.length() 0 || UNKNOWN.equalsIgnoreCase(ip)) {ip request.getRemoteAddr();}// 本机访问if (localhost.equalsIgnoreCase(ip) || 127.0.0.1.equalsIgnoreCase(ip) || 0:0:0:0:0:0:0:1.equalsIgnoreCase(ip)){// 根据网卡取本机配置的IPInetAddress inet;try {inet InetAddress.getLocalHost();ip inet.getHostAddress();} catch (UnknownHostException e) {e.printStackTrace();}}// 对于通过多个代理的情况第一个IP为客户端真实IP多个IP按照,分割if (null ! ip ip.length() 15) {if (ip.indexOf(,) 15) {ip ip.substring(0, ip.indexOf(,));}}return ip;}public static String getIpAddrByLocal(String ip) {// 1、创建一个完全基于文件的查询对象String xdbPath src/main/resources/ip2region.xdb;Searcher searcher;try {searcher Searcher.newWithFileOnly(xdbPath);}catch (Exception e) {log.error(无法创建内存的查询对象Searcher);return null;}// 2、查询try {return searcher.searchByStr(ip);} catch (Exception e) {log.error(IP地址位置查询失败(%s)%s\n,ip, e);}return null;}public static String getIpAddrByByOnline(String ip) {String address UNKNOWN;if (internalIp(ip)) {// 判断是否是内网如果是内网则不进行查询直接返回return 内网IP;}if (true) {try {String rspStr sendGet(IP_URL, ip ip jsontrue ,GBK);if (StrUtil.isBlank(rspStr)) {log.error(获取地理位置异常 {} , ip);return UNKNOWN;}JSONObject obj JSONUtil.parseObj(rspStr);String region obj.getStr(pro);String city obj.getStr(city);return String.format(%s %s , region, city);} catch (Exception e) {log.error(获取地理位置异常{},ip);}}return address;}public static String sendGet(String url, String param, String contentType) {StringBuilder result new StringBuilder();BufferedReader in null;try {String urlNameString url ? param;log.info(sendGet - {} , urlNameString);URL realUrl new URL(urlNameString);URLConnection connection realUrl.openConnection();connection.setRequestProperty(accept , */*);connection.setRequestProperty(connection , Keep-Alive);connection.setRequestProperty(user-agent , Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1));connection.connect();in new BufferedReader(new InputStreamReader(connection.getInputStream(), contentType));String line;while ((line in.readLine()) ! null) {result.append(line);}log.info(recv - {} , result);} catch (ConnectException e) {log.error(调用HttpUtils.sendGet ConnectException, url url ,param param, e);} catch (SocketTimeoutException e) {log.error(调用HttpUtils.sendGet SocketTimeoutException, url url ,param param, e);} catch (IOException e) {log.error(调用HttpUtils.sendGet IOException, url url ,param param, e);} catch (Exception e) {log.error(调用HttpsUtil.sendGet Exception, url url ,param param, e);} finally {try {if (in ! null) {in.close();}} catch (Exception ex) {log.error(调用in.close Exception, url url ,param param, ex);}}return result.toString();}private static boolean internalIp(String ip){return internalIpList.contains(ip);} } 特别说明这里我们将其解析封装成一个工具类包含获取IP和ip地址解析两个方法ip 的解析可以在请求中获取。获取到ip后根据ip在xdb 中查找对应的IP地址的解析由于是本地数据库可能存在一定的缺失部分ip 存在无法解析的情况。  ip2region v2.0 是一个离线 IP 地址定位库和 IP 定位数据管理框架10 微秒级别的查询效率准提供了众多主流编程语言的 xdb 数据生成和查询客户端实现。 数据聚合了一些知名 ip 到地名查询提供商的数据这些是他们官方的的准确率经测试着实比经典的纯真 IP 定位准确一些。 备注如果上述开放 API 或者数据都不给开放数据时 ip2region 将停止数据的更新服务。 每个ip数据段的 region 信息都固定了格式国家|区域|省份|城市|ISP只有中国的数据绝大部分精确到了城市其它国家部分数据只能定位到国家后面的选项全部是0。 除了完全基于xdb文件的查询我们还可以通过如下两种方式开启内存加速查询 第一种方式缓存 VectorIndex 索引 我们可以提前从xdb文件中加载出来VectorIndex数据然后全局缓存每次创建Searcher对象的时候使用全局的VectorIndex缓存可以减少一次固定的IO操作从而加速查询减少IO压力。  import org.lionsoul.ip2region.xdb.Searcher;public class Demo {public static void main(String[] args) {// 1、从dbPath中预先加载VectorIndex索引并且把这个得到的数据进行缓存作为全局变量后续反复使用。String dbPath 文件路径;byte[] vIndex new byte[10];try {vIndex Searcher.loadVectorIndexFromFile(dbPath);} catch (Exception e) {e.printStackTrace();}// 2、使用全局的vIndex 创建带 VectorIndex 缓存的查询对象。Searcher searcher;try {searcher Searcher.newWithVectorIndex(dbPath, vIndex);} catch (Exception e) {e.printStackTrace();}} } 第二种方式缓存整个 xdb 文件数据 将整个xdb文件全部加载到内存内存占用等同于xdb文件大小无磁盘IO操作保持微秒级别的查询效率。  import org.lionsoul.ip2region.xdb.Searcher;public class Demo {public static void main(String[] args) {// 1、根据dbPath直接加载整个xdb文件并且把这个得到的数据进行缓存作为全局变量存储到内存中String dbPath 文件路径;byte[] cBuff;try {cBuff Searcher.loadContentFromFile(dbPath);} catch (Exception e) {e.printStackTrace();return;}// 2、使用上述的 cBuff 创建一个完全基于内存的查询对象Searcher searcher;try {searcher Searcher.newWithBuffer(cBuff);} catch (Exception e) {e.printStackTrace();}} } 二、在线解析 如果想要获取更加全面的ip地址信息可使用在线数据库这里提供的是whois.pconline.com的IP解析该IP解析在我的使用过程中表现非常流畅而且只有少数的ip存在无法解析的情况。 特别说明示例代码在上面 三、应用场景 那么在项目的什么流程获取ip地址是比较合适的这里就要用到我们的拦截器了。拦截进入服务的每个请求进行前置操作对请求头的解析获取ip以及ip属地。 import com.example.demo.utils.IPUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;Slf4j Configuration public class IpUrlLimitInterceptor implements HandlerInterceptor {Overridepublic boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) {/*** 第一种方式通过本地获取IP的具体地址*///String ip IPUtil.getIp(httpServletRequest);//String addr IPUtil.getIpAddrByLocal(ip);//String url httpServletRequest.getRequestURI();/*** 第二种方式 通过在线库获取*/String ip IPUtil.getIp(httpServletRequest);String addr IPUtil.getIpAddrByByOnline(ip);String url httpServletRequest.getRequestURI();return true;}Overridepublic void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) {}Overridepublic void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {} } import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;Configuration public class WebConfig extends WebMvcConfigurerAdapter {Autowiredprivate IpUrlLimitInterceptor interceptor;Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(interceptor);} }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/84901.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

音乐介绍网站怎么做的网站怎样推广 优帮云

目前市面上大多一对一互动都是基于WebRTC,缺点如下: 服务器部署非常复杂,不利于私有部署,在一些私密性高的场景下,无法使用,如公安、市政等体系;传输基于UDP,很难保证传输质量&…

网站建设知识产权问题品牌营销平台

机器学习入门系列(2)–如何构建一个完整的机器学习项目,第五篇! 该系列的前四篇文章: 机器学习入门系列(2)–如何构建一个完整的机器学习项目(一)机器学习数据集的获取和测试集的构建方法特征工程之数据预处理&#…

莘县制作网站黑龙江建设网网站一体化平台

目录 一.关系型数据库和非关系型数据库 关系型数据库 非关系型数据库 关系数据库与非关系型数据库的区别 ①非关系数据 关系型数据库 非关系型数据库产生背景 数据存储流向 非关系型数据库 关系数据库 二.redis的简介 1.概念 2.Redis 具有以下几个优点: 3.Redi…

沧州模板建站开源项盿南京网站开发xuan南京乐识

CodePen 是一个在线的前端代码编辑和展示网站,能够编写代码并即时预览效果。你在上面可以在线分享自己的 Web 作品,也可以欣赏到世界各地的优秀开发者在网页中实现的各种令人惊奇的效果。 今天这篇文章为大家挑选了15个超炫的 CSS 动画效果的例子&#x…

企业网站建设的调研网站开发及服务器总共多少钱

机器人达到指定位置方法数 来自左程云老师书中的一道题 【题目】 假设有排成一行的 N 个位置,记为 1~N,N 一定大于或等于 2。开始时机器人在其中的 M 位置上(M 一定是 1~N 中的一个),机器人可以往左走或…

免费com域名网站网站建设制作设计营销 中山

我们新项目硬件设计上使用gpio口做按键,所以我就需要搞定这个驱动,本来想自己写一个gpio口的按键驱动,然后看了下内核下面的代码,已经有现成的了。Linux内核下游很多很多的现成驱动,只要你想得到的,基本都是…

辽宁网站建设专业学校wordpress 80端口

之前的blog链接:https://blog.csdn.net/weixin_43303286/article/details/131700482?spm1001.2014.3001.5501 我用的方法是在leetcode再过一遍例题,明显会的就复制粘贴,之前没写出来就重写,然后从拓展题目中找题目来写。辅以Lab…

所有网站排名2015年wordpress链接数据库文件

前言 在游戏和图形应用开发领域,大型场景的纹理管理一直是一个具有挑战性的任务。Unity3D中的Virtual Texture(虚拟纹理)技术为这一难题提供了一种创新的解决方案。本文将对Virtual Texture技术进行详细介绍,并提供代码实现的基础…

网站建设进度及实过程外包加工网会员

Nginx在主流硬件上的并发数为十万,网络处理方面的领先地位,归功于突破性的事件驱动架构。 Nginx在每颗内核上创建一个工作进程,有效利用硬件资源。 在单个工作进程中交替处理多个连接,应对突如其来的网络流量。 Nginx资源管理 Nginx使用状态机管理流量。 非阻塞事件…

屏蔽ip网站吗北京微信小程序开发报价

目录 一、socket简介 二、socket编程接口函数介绍 2.1 socket()函数(创建socket) 2.2 bind()函数(绑定地址和端口) 2.3 listen()函数(设置socket为监听模式) 2.4 accept()函数(接受连接…

域名注册没有网站wordpress不用缓存

hash实现 redis的hash数据结构和java的HashMap虽然不同,但是有异曲同工之妙,value是键值对,相当于HashMap,对于hash碰撞也是采用的类似于HashMap的处理方式,数组链表,更适合存储对象,将一个对象…

网站知识架构在线培训系统软件

一.题目要求 已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组。例如,原数组 nums [0,1,2,4,5,6,7] 在变化后可能得到: 若旋转 4 次,则可以得到 [4,5,6,7,0,1,2]若旋转 7…

建设银行安徽 招聘网站在线制作网站 如何禁止蜘蛛收录网站

Python是一种高级编程语言,非常适合用于集成API,即应用程序编程接口。API通常是由网站和各种软件提供的接口,可以让不同的程序之间进行数据交换和通信。在Python中调用API,可以帮助我们轻松地获取数据,并将其整合到我们…

网站模板psd旅游公司网站建设ppt

Azure/azure-quickstart-templates Stars: 13.4k License: MIT 这个项目是 Azure Resource Manager QuickStart Templates,它包含了社区贡献的所有当前可用的 Azure 资源管理器模板。维护着一个可搜索的模板索引,并提供如何使用或向该存储库做出贡献的…

网站系统分析报告昆山有建设网站的吗

偶尔听歌的时候发现了一个很小众的音乐分享网站,邻居的耳朵,有个人的电台类型,属于音乐分享文字分享,觉得很不错。从域名来看,属于多米旗下的网站:http://ear.duomi.com/ 看来多米收购了很多这样的小站&am…

网站专题页面案例2015年做那个网站致富

文件上传基础篇 文件上传漏洞原理 ​ 目标网站存在文件上传接口,但是对用户上传的文件没有做仔细甄别,导致黑客可以根据此功能点直接上传木马到网站服务器,造成危害 文件上传存在点 ​ 通常有头像上传,pdf上传 文件上传防护 …

西安网站制作流程中国网库企业黄页

燃财经(ID:rancaijing)原创 作者 | 杜枫 编辑 | 魏佳中国互联网的发展,是一部由大佬撑起的奋斗史,也是一部由大佬主演的打脸史。和传统行业不同,互联网行业日新月异,从业者趋于年轻。马云唱起了摇滚&#x…

做网站主流技术免费网页模板源代码

文 │ 骨朵国漫一、各漫画平台总体趋势1、快看漫画快看漫画平台2019年Q2各月评论数较Q1有较明显的下滑,月评论数都在400万条左右;收藏数方面,2019年2月达到了半年内最高值,为2660.1万条。2、看漫画、知音漫客等平台(小明太极旗下)…

长沙网站改版域名备案 网站名称

2020年艰难而短暂,而互联网的历史车轮还是轰隆隆一路向前,服务网格/云原生/Serverless架构,各种新架构大行其道。重新审视当下主流的编程语言,天下第一的Java已老,下行多年的.NET却浴火重生,焕发生机&#…

福州网站建站建立网站就可以赚钱了吗

共阴极或者共阳极数码管,因为其需要电流大,而一般51输出电流低,需要锁存器。买的开发板使用的共阴极数码管。至于其构造,找个相关方面的书看看,这里主要是对做好的电路板进行编程。刚开始的时候,感觉在数码…