当前位置: 首页 > news >正文

徐州网站营销网站开发的软硬环境怎么描述

徐州网站营销,网站开发的软硬环境怎么描述,中国工程建筑网,建站的cms某些业务需要获取请求IP以及将IP解析成省份之类的,于是我写了一个工具类,可以直接COPY /*** IP工具类* author xxl* since 2023/11/9*/ Slf4j public class IPUtils {/*** 过滤本地地址*/public static final String LOCAL_ADDRESS "127.0.0.1&quo…

某些业务需要获取请求IP以及将IP解析成省份之类的,于是我写了一个工具类,可以直接COPY

/*** IP工具类* @author xxl* @since 2023/11/9*/
@Slf4j
public class IPUtils {/*** 过滤本地地址*/public static final String LOCAL_ADDRESS = "127.0.0.1";public static final String LOOP_BACK_ADDRESS = "0:0:0:0:0:0:0:1";/*** 离线查询IP地址的数据文件,这个文件去ip2region GitHub官方仓库获取*/private static  String IP_ADDRESS_FILE_PATH ;/*** 前从 xdb 文件中加载出来 VectorIndex 数据,然后全局缓存,* 每次创建 Searcher 对象的时候使用全局的 VectorIndex 缓存可以减少一次固定的 IO 操作,* 从而加速查询,减少 IO 压力。*/private static  byte[] vIndex= null;private static Searcher searcher = null;static {try {//这个ip2region.xdb我是放在/resources/data/ip2region.xdb目录下的String fileName = "/data/ip2region.xdb";File existFile = FileUtil.file(FileUtil.getTmpDir() + FileUtil.FILE_SEPARATOR + fileName);if(!FileUtil.exist(existFile)) {InputStream resourceAsStream = IPUtils.class.getResourceAsStream(fileName);FileUtil.writeFromStream(resourceAsStream, existFile);}IP_ADDRESS_FILE_PATH = existFile.getPath();// 从 db 中预先加载 VectorIndex 缓存,并且把这个得到的数据作为全局变量,后续反复使用。vIndex = Searcher.loadVectorIndexFromFile(IP_ADDRESS_FILE_PATH);// 使用全局的 vIndex 创建带 VectorIndex 缓存的查询对象。searcher = Searcher.newWithVectorIndex(IP_ADDRESS_FILE_PATH, vIndex);} catch (Exception e) {throw new RuntimeException("IPUtils class load error", e);}}/*** 每个线程需要单独创建一个独立的 Searcher 对象,但是都共享全局的制度 vIndex 缓存。* @param ip IP* @return IP地址*/public static String getCity(String ip)  {String search = null;try {search = searcher.search(ip);} catch (Exception e) {throw new RuntimeException("getCity fail",e);}return search;}/*** 获取 IP** @param request 请求* @return 字符串*/public static String getIp(HttpServletRequest request) {String ip = null;try {//解析IPip = new ChainUtils<>(request.getHeader("X-Forwarded-For"))//多次反向代理后会有多个ip值,第一个ip才是真实ip.chain(re -> StrUtil.isNotBlank(re) ? (re.contains(DOT) ? re.substring(0, re.indexOf(DOT)) : EMPTY) : re)//依次查找IP.chain(re -> StrUtil.isNotBlank(re) ? re : request.getHeader("X-Real-IP")).chain(re -> StrUtil.isNotBlank(re) ? re : request.getHeader("Proxy-Client-IP")).chain(re -> StrUtil.isNotBlank(re) ? re : request.getHeader("WL-Proxy-Client-IP")).chain(re -> StrUtil.isNotBlank(re) ? re : request.getHeader("HTTP_CLIENT_IP")).chain(re -> StrUtil.isNotBlank(re) ? re : request.getHeader("HTTP_X_FORWARDED_FOR")).chain(re -> StrUtil.isNotBlank(re) ? re : request.getRemoteAddr())//过滤本地地址.chain(re -> StrUtil.isNotBlank(re) ? (LOOP_BACK_ADDRESS.equals(re) ? LOCAL_ADDRESS : re) : re).getValue(true);} catch (Exception e) {log.error("getIp fail", e);}return ip;}
}

使用以上工具类需要以下依赖和一个自定义工具类

<!--    解析IP    -->
<dependency><groupId>org.lionsoul</groupId><artifactId>ip2region</artifactId><version>2.7.0</version>
</dependency>
<!--   hutool     -->
<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.20</version>
</dependency>

ChainUtil:为什么写这个工具类在解析请求中的IP参考了https://blog.csdn.net/chwshuang/article/details/71940858此博客中部分代码如下图可以发现有很多if判断,很难看不好维护。于是就写了以下的工具类

/*** @author: xxl* @since: 2023/11/9* @description: 解决if,else地狱*/
@AllArgsConstructor
public  class ChainUtil<T> {/*** 存储的值*/private T value;public <E> ChainUtil<E> chain(Function<T,E> function) {return new ChainUtil<>(function.apply(value));}/*** 获取存储的值** @param isNullForException 如果存储的值为null是否抛出异常* @return T*/public T getValue(boolean isNullForException) {if (isNullForException) {Assert.notNull(value, () -> new RuntimeException("chain value is null"));}return value;}
}

if地狱

在这里插入图片描述

http://www.yayakq.cn/news/708678/

相关文章:

  • 广州市网站建设公司在哪里网页设计尺寸单位一般为
  • 网站服务器在哪里重庆刚刚发布
  • 互联网网站商标大连网站流量优
  • 沈阳百度网站的优点网站综合营销方案
  • 聊城网站制作公司电话网站建设尚品
  • 做网站的公司赚钱吗北京金山办公软件公司
  • 网站手机访问跳转代码导购网站需要备案吗
  • 做几个小网站还是做一个大网站南京建设企业
  • 枸橼酸西地那非片功效效及作用上海seo优化公司kinglink
  • ps做素材下载网站2345网址导航app下载2021
  • 西安做网站好的公司公司名称吉凶查询大吉
  • funpinpin建站平台wordpress mohtml
  • 荆州市城市建设档案馆网站做第三方网站注意什么意思
  • 电商网站开发数据库设计专业网站设计如何提升网页品质
  • 手机网站制作哪家好国内前10电商代运营公司
  • 幸福人寿保险公司官方网站保单查询wordpress浮窗播放器
  • 星光影视园网站建设案例谷歌收录wordpress
  • 绍兴 网站建设 电话羽毛球赛事最新消息
  • 怎么把网站做漂亮商务网站开发意义
  • 国内用react做的网站免费建网站电话
  • seo 网站标题长度建设工程信息平台官网
  • 常州市建设局网站6房产中介网站建设进度
  • 《30天网站建设实录》软件搭建平台
  • 哪个网站域名解析网页设计的背景代码大全
  • 修改网站模板代码生成器手机版下载
  • 百度网站说明书网站建设流程百度经验
  • 互动型网站模板注册平台
  • 长春网站建设方案手机版网站模板
  • 库车县建设网站唐山市建设交易中心官方网站
  • 网站建设制作设计营销 上海青岛网站建设seo