- 博客(77)
- 收藏
- 关注
原创 数据防扒指北
企业的发展离不开数据的支撑,尤其是核心的底层数据,随着技术的升级,数据方面的生成、传输、获取、处理、清洗、归纳逐步加上了安全的外衣,同行业间企业的竞争也逐渐演变成数据的竞争。最近项目中发现,系统中存在被爬取数据的行为,而且已经初步可以认定是竞对的手法,所以针对这一行为,需要升级防爬措施,避免关键数据的流失。数据防扒是很常见的数据安全攻防的场景,这里先说一下结论,
2023-11-16 17:32:19
859
原创 IDEA上传jar包至maven的私有仓库
最近老是需要更改自定义开源的jar包,自定义开发完成之后还需要上传到我们公司的私有仓库,每次上传过程不是很顺利,于是今天趁着过节记录一下[手动狗头]。除了IDEA的一键上传之外,还可以使用maven命令上传,笔者嫌一个个上传太麻烦,且不方便后面的更新发布,所以就采用文中介绍的这种方式。上传私服的jar一般需要更改对应的group,或者根据公司的命名规则更改就好,对应的版本号也最好和官方的版本进行区分。注意:上传仓库的类型一定要是hosted类型,否则会报405错误。
2022-10-24 17:35:00
5616
1
原创 BUG记录——The temporary upload location xx is not valid
背景在用户使用导入excel文件的时候,生产环境突然报Failed to parse multipart servlet request; nested exception is java.io.IOException: The temporary upload location [/tmp/tomcat.1867764691194364960.8045/work/Tomcat/localhost/rpay] is not valid这个错误,很显然,是因为服务器的指定目录不存在导致的,需要立即紧急给客户
2022-02-10 17:50:52
1364
原创 密码强度校验
密码强度校验改造背景 由于对项目中用户的密码级别有一定要求,所以需要对用户的密码强度基于一定的校验,方便在重置密码时可以引导用户使用强度偏大的密码,以此为背景展开改造工作。 由于是对页面的改造,且涉及到多个项目,需要尽可能的改动少量文件,以下为实施过程。Demo搭建<!DOCTYPE html><html><head> <meta charset="utf-8"> <title>密码强度检测算法分析及实现-zxcv
2022-02-09 13:24:56
2901
原创 YYYY日期格式化坑点解析
背景今天在生产环境发现一个问题,给第三方推送的接口的时间参数跨了一年,导致对方查不到数据,首先定位了一下报文的代码,使用的new Date()并且进行了格式化,按说不会出现相差一年的情况。分析该系统一直运行稳定,最近并没有进行更新,上周的日期还是正确的,但是本周就行了,遂将该处代码进行单元测试。 @Test(description = "测试日期格式换") public void testDate() { System.out.println(DateUtil.format(
2021-12-28 16:35:56
2133
原创 DataGrip使用教程(GIF版)
DataGrip使用教程背景今天给大家介绍一款数据库连接工具,可能你正在使用navicat、workbench、sqlyog、DBeaver等等,这里不做拉踩,没有最好的工具,更没有完美的工具,即便众多连接工具的目标肯定是趋于完美,笔者认为,适合自己的才是最好的,下面给大家介绍一下jetbrain大家族中dataGrip,特色功能很多,下面只是列举了开发中常见的操作,欢迎大家评论补充。正文1、下载和安装https://www.jetbrains.com/datagrip/激活方式和IDEA一样
2021-11-22 14:44:19
28237
11
原创 jetbrain产品历史版本下载
背景最近发现jetbrain的新版如果是需要使用的话,需要注册并且登录jetbrain的官方账号(笔者怀疑是,为了打击pojie的新手段),加入注册登录的话,那么官方必然可以获取到账号的单次试用时间,这样的话,可能就没法使用无限重置脚本进行特殊使用了,所以就想着下载历史版本方案假如,我们想下载webStorm的历史版本,对应的url为https://www.jetbrains.com/webstorm/download/other.html,当然如果想下载其他的产品的话,只需要将url中的websto
2021-11-22 09:43:25
798
原创 SVN迁移至GIT,并附带历史提交记录
SVN代码同步至GIT背景近年随着信息工程量的多元化发展,GIT主键取代SVN成为主流的版本管理工具,部门的项目代码也决定迁移至git进行管理,所以就调研了一下具体的实现方案,要求可以同步提交记录,便于历史追溯。准备工作个人SVN的用户名和密码(同步时需要输入)涉及到项目中SVN提交记录对应的SVN账号信息(可参考userinfo.txt文件,增量补充即可),左侧是SVN的账号,右侧是git账号信息,用=号连接,如下图:注意:需要将涉及到的同步记录中的用户都做映射,否则在同步时可能会报错
2021-11-17 17:23:27
6669
1
原创 利用反射实现自定义比较器
问题背景需求:从第三方获取数据列表,传到前台进行展示,目前前台需要可以根据任意字段进行排序(升序和降序),但是第三方接口不支持排序功能,所以需要手动实现数据的排序。问题分析方案一:数据入库将第三方数据存储到数据库中,直接可以根据sql进行排序输出。缺点:本来就是实时数据,但是从数据库饶了一圈,先将数据写入,再将数据读出,增加了两次的数据库IO方案二:根据字段进行排序根据前台上送的字段信息和升降序信息,实现列表的排序功能。缺点:因为字段不确定,如果针对每个字段都实现一种排序方式,再加
2021-01-31 23:57:41
220
原创 Unboxing of ‘xxx‘ may produce ‘NullPointerException‘
背景今早在排查生产日志的时候发现了一个空指针异常,遂跟踪了一下,最后发现报异常的代码如下if (null != vo.getLongitude()) { rsp.setDistance(Objects.isNull(map.get("distance")) ? null : (double) map.get("distance")); } //distance定义 private double distance;以上代码逻辑很简单,就是在经度不为空且计算的
2020-10-15 10:16:47
24545
原创 RSA算法解密 javax.crypto.BadPaddingException: Decryption error 异常
背景最近需要对接京东的一个会员管家嵌入到小程序当中,在进行接口请求时,需要对敏感的字段进行RSA加密处理,所以想写一个工具类方便调用。生成秘钥、加密明文都没问题,就是在解密的时候时候出现了一下异常:原因在使用公钥加密的时候,最后我用了Base64进行了编码Base64.getEncoder().encodeToString(encryptedData)而在我进行解密的时候,直接使用了字符串的getByte获取了字节数组,导致得到的字节数组无法被秘钥解密。应该先使用Base64进行解码获取字节
2020-10-13 10:17:00
12517
3
转载 maven中的dependencies和dependencyManagement的区别
背景介绍昨天CTO找到我,让我整理一下项目中的lombok包的版本,因为在项目打包运行的时候,总是会出现classNotFound的错误,怀疑是lombok包的版本不一致导致的。所以啊,我就开始在项目中引入lombok的地方一 一做修改,我们项目的子项目大概有15个左右,后来觉得有点笨拙,就在父pom中定义了一个lombok的版本变量,这样,我下次再进行版本修改的时候,只需更改父pom中的版本号即可。原本觉得做得很不错,于是把代码提交,CTO看了之后,让我了解一下DepencyManagement的用
2020-09-28 15:33:04
466
原创 sun.misc.BASE64Decoder的替换方案,使用java.util.Base64代替
背景在项目进行编译时,控制台会出现以下警告信息,提示sun.misc.BASE64Decoder是内部API,会在将来的版本的进行删除,需要避免使用解决使用java.util.Base64来替代,如下:使用原始的BASE64Encoderpublic static String imageToBase64ByLocal(File file) { byte[] data = null; // 读取图片字节数组 try (InputStream in
2020-09-27 12:07:58
9556
原创 i++的线程安全性问题分析
背景今天分享一道常见的面试题:i++是线程安全的吗?既然这么问了,答案肯定是不安全啊,至于为啥不安全,咱们来说道说道分析前提谈到线程安全问题,那什么情况下会出现线程安全的问题呢,就是当多个线程操作同一个共享变量的时候,就会出现线程安全问题;那共享变量又是指哪些呢,就是存储在堆中即主内存的变量信息,包括全局变量、对象实例、静态变量等。而在方法内部的声明的临时变量是不会存在线程安全问题的,因为这些变量是存储在线程的工作内存中(即私有内存),线程与线程间是无法共享的。**所以,我们讨论的线程安全问
2020-09-23 11:19:45
2238
原创 自定义拦截器实现权限校验
背景前几天接收到一个业务需求,简要描述一下,当某个企业账户冻结之后,企业在登陆后台管理系统,不能进行某些操作,如导入员工信息、发放员工福利、发票信息申请等,但是系统中的查看功能如账单查询、员工查询都可以正常使用。很显然,从全局去处理账户的状态判断是不可取的,因为在账户冻结之后,并不是所有的动作都是被禁止的,这里就可以使用过滤器对指定的方法进行筛选校验既定方案使用自定义的注解,标注需要进行账户状态校验的请求方法,使用拦截器拦截这些接口,在拦截器中执行账户状态的判断,如果账户状态正产则放行,如果状态异常
2020-09-21 12:02:43
1153
原创 使用stopwatch实现接口的耗时日志输出
背景对接业务逻辑的耗时计算,以前都是使用System.currentTimeMillis();,分被获取开始时间和结束时间,最后算出差值来显示执行的耗时。spring框架中提供了一个秒表功能——stopwatch,我们可以直接实例化一个stopwatch的对象,调用start和stop方法即可完成时间的差值计算。stopWatch的基本使用用法public static void main(String[] args) throws InterruptedException {
2020-09-21 10:45:15
2669
原创 解决Layui表格头部工具栏事件绑定失效,上传文件按钮失效问题
背景最近使用了layui的前端框架,也在慢慢适应中,好多功能都已经封装得很实用,遇到不会的功能,看看官网的demo的文档,都还是可以解决的,毕竟咱们的模仿能力还是可以的。记录一下昨天遇到的一个问题,就是我想在表格的头部工具栏,增加一个文件上传的接口,用于数据的批量导入,就简单的写了一个按钮,使用upload组件实现了功能,但是奇怪的事情发生了,第一次上传成功之后,页面不刷新,再次点击第二次的话,是无法上传文件,想后台发出请求的,最后排查的原因是,按钮上面的事件乜有被渲染,到时上传组件无法与指定的按钮进行
2020-09-14 17:36:13
4865
4
原创 辨析BigDecimal的toString()方法和toPlainString()方法
辨析BigDecimal的toString()方法和toPlainString()方法toString()toString方法会将BigDecimal的值以科学计数方式的字符串但是转换成科学计数的方式也是有场景的,并不是所有的值都会转为科学计数方式的字符串,网上好几篇文章感觉都是照搬的一样,并没有详细的说明什么情况会以科学计数的方式输出字符串, 只能自己去扒了一下源码,首先,任何一个BigDecimal都可以使用一个公式表示:unscaledValue × 10-scale解释一下:unsca
2020-08-11 10:32:39
30487
1
原创 BigDecimal去除尾部多余的0
方法new BigDecimal("100.20")).stripTrailingZeros().toPlainString()//100.2下一篇介绍一下toPlainString和toString的区别和用法
2020-08-11 10:31:22
336
原创 使用Arthas实现不停机更新
这里写自定义目录标题背景下载安装查询需要替换的文件的类加载器加载指定的class文件注意背景生产服务器的缺陷往往需要进行紧急更新,即使是多节点部署也避免不了需要重新启动服务器,使新的逻辑代码更新,所以不停机更新文件显得至关重要,今天介绍一下使用阿里的arthas实现不停机更新文件。大致思路:我们都知道class文件的加载都是依附于类加载器的,所以我们要做的就是让原本的类加载器重新去加载类文件,这样就可以实现不重启服务器更新应用。而arthas做的就是面向jvm,拿到指定的累加器和待更新的class编译
2020-07-14 18:48:46
653
原创 AJAX获取的日期相差8小时
背景今天接收到一个生产缺陷,客户的创建信息列表页,创建时间显示错误,比数据库的时间晚了八个小时;但是当第一次请求时,时间展示却是正常的,只有翻页或者筛选的时候才会出现异常。问题分析首先可以确定的是,数据库的创建时间是准确的,没有误差的;其次就是页面的第一次加载是正确现显示的,但是执行筛选或者翻页时就会出现日期误差;之前页面的逻辑是我写的,为了配合页面的echarts组件展示,我将条件筛选查询和翻页查询都做成了ajax的页面请求,这样在筛选的时候,就不会刷新页面但又能更新数据了。所以,目前的排查的主
2020-07-07 15:27:22
680
原创 POM打包采用lib包分离策略
背景在springboot项目构件时,难免需要依赖其他的jar包,但是在项目打包部署的时候,就需要指定lib包,一般情况下,会将lib中依赖的的jar包一块打包,这就导致了最后的应用的jar包非常大,使部署十分不方便,而且也不利于修改。下面就来介绍一下lib包分离的策略。解决方案在pom文件中引入两个插件maven-dependency-plugin和maven-jar-plugin;maven-dependency-plugin主要作用是可以将依赖的所有lib包,复制到指定位置,项目中用法可参
2020-07-06 11:05:46
961
原创 优化慢查询(替换子查询、增加索引字段)
背景昨天老大给我分了个活,在日志文件中发现,某条SQL执行耗时14秒左右,我接受到的任务就是优化之,在这里记录一下原始SQLselect rel.COMPANY_ID as companyId,account.appid,account.mobile, account.customer_id as customerId from tb_account account left join tb_account_bank_rela rel on account.customer_id = rel
2020-07-04 18:23:05
559
1
转载 top命令参数详解
top命令用法top命令经常用来监控linux的系统状况,是常用的性能分析工具,能够实时显示系统中各个进程的资源占用情况。top的使用方式 top [-d number] | top [-bnp]参数解释:-d:number代表秒数,表示top命令显示的页面更新一次的间隔。默认是5秒。 -b:以批次的方式执行top。 -n:与-...
2020-07-03 09:12:03
1409
原创 Linux下使用jar包启动应用的多种方式
背景最近在云端部署应用的时候,发现了jar包启动的多种场景,在这里分享一下。启动方式方式一java -jar xxx.jar特点:进入应用的启动界面,当前窗口被锁定,当输入ctrl+c,会终止程序方式二nohup java -jar xxx.jar &&为后台运行nohub表示不间断运行特点:当终端被关闭或者用户退出,都不会导致应用的停止;这个方式是我们比较常用的备注:该方式会默认生成一个nohup.out文件,用于记录应用的日志信息,可以使用tail命令
2020-07-02 15:56:06
577
原创 jar包中没有主清单属性如何解决
背景在使用maven打包项目的时候,mvn clean package ,报了一个jar包中没有主清单属性如何解决错误;很明显是没有指定mainClass解决修改pom文件,引入spring-boot-maven-plugin<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifac
2020-06-28 12:28:37
5078
1
原创 MySQL8.0连接配置信息
背景今天在起了个新项目,使用的mysql8版本,在进行springboot数据源配置的是时候,踩了几个坑,最终才把数据库连接上,在这里记录一下。项目参数mysql版本(select version();)pom 文件<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <vers
2020-06-27 22:03:01
3878
原创 restTemplate发送post请求,响应报文乱码
背景今天在项目中调用百度云的智能地址识别,使用的是restTemplate发送post请求,最后发现响应体内的中文报错,静态方法如下:public static AiAddress getAddress(String addressText) throws BizException { String url = "https://aip.baidubce.com/rpc/2.0/nlp/v1/address?charset=UTF-8&access_token=" + getAu
2020-06-22 17:07:35
2423
2
原创 Bigdecimal除法异常Non-terminating decimal expansion
文章目录异常分析解决措施思考总结异常分析其实提示信息已经很明显了,出现了无限循环小数,无法返回bigdecimal的值,回顾一下项目中的代码方式:return new BigDecimal(baseMonth).divide(new BigDecimal(workDay)).setScale(2, BigDecimal.ROUND_HALF_UP);代码如上,使用baseMonth除以workDay,返回的值按照四舍五入的方式保留两位小数。但是还是出现了异常,原因就在于divide的调用方式。解
2020-06-16 11:55:40
1372
转载 nginx中的正向代理和反向代理
正向代理一般的访问流程是客户端直接向目标服务器发送请求并获取内容,使用正向代理后,客户端改为向代理服务器发送请求,并指定目标服务器(原始服务器),然后由代理服务器和原始服务器通信,转交请求并获得的内容,再返回给客户端。正向代理隐藏了真实的客户端,为客户端收发请求,使真实客户端对服务器不可见;举个具体的例子 ????,你的浏览器无法直接访问某个,这时候可以通过一个代理服务器来帮助你访问谷哥,那么这个服务器就叫正向代理原理图:反向代理与一般访问流程相比,使用反向代理后,直接收到请求的服务器是代理
2020-06-15 15:43:47
373
转载 使用Nginx配置反向代理,完成端口转发
序言最近搭了一个博客网站,但是在访问的时候需要额外加上客户界面的端口号,显得比较low,所以想用nginx实现端口代理,访问80端口之后,自动转发到指定端口,这样间接的隐藏了访问的端口安装Nginx简要的介绍一下我安装nginx的步骤,已安装的可忽略首先查看一下安装的版本yum list | grep nginx最后一列前缀含有@表明是已安装的安装nginxyum install nginx或者yum -y install nginx加上 -y 参数,即为全自动安装,因为在
2020-05-11 18:06:09
94313
2
原创 Maven命令的常用参数以及说明
文章目录Maven命令的常用参数以及说明参数及说明查看命令参数说明中文对照Maven命令的常用参数以及说明参数及说明查看命令mvn -h或者mvn -help使用以上命令可查看,maven常用参数以及说明,结果如下图:C:\projectPackage>mvn -husage: mvn [options] [<goal(s)>] [<phase(s)&g...
2020-05-08 09:38:14
4951
原创 java8中的Optional用法浅析
文章目录简介Option之前Option特性创建Optional对象Optional对象相关操作方法get()orElse(T other)ifPresent(Consumer<? super T>)orElseThrow(Supplier<? extends X> exceptionSupplier)其他Optional实践用于封装可能为null的值尽量不用于域模型中的某...
2020-05-07 15:11:24
4183
4
原创 MYSQL的limit的多种用法
序言这个知识点一直在用,但前两天突然发现对limit的语法和各种表达方式,还是有点混淆,老是出现查不到分页数据的情况,今天记录一下limit的用法语法limit 一般和limit联合使用,用于数据的分页查询,当然也会用于数据的截取,下面是limit的用法:SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset 变形...
2020-04-28 10:23:35
1997
原创 IDEA批量替换文件换行符、分隔符CRLF、LF、CR
全局设置(只对新文件有效)file–>setting–>code style–>Line separator,选中需要替换的分隔符类型注意: Line separator下面有行小字,applied to new files,意味着该处设置只针对于新增的文件。指定范围设置(可用于老项目改造)第一步:选中你需要更改的文件目录,选中的目录代表下面的所有文件都会被更改line...
2020-04-14 11:17:51
26900
3
原创 MYSQL中日期加减(前一天、后一天等)以及格式化的函数
序言最近在写定时任务,查询条件中反复的会使用时间区间作为筛选条件,难免的会碰到对日期的操作,如获取前一天、后一天、一周前、一个月前等,索性整理一下MYSQL中的相关函数日期的加减date_add和date_sub语法为:date_add(date,interval expr type)、date_sub(date,interval expr type)其中常用的type的类型有:seco...
2020-04-07 23:26:19
32340
原创 MySQL中的sum函数遇到null的坑点
细数sum遇到null的各种情况1、前言2、sum值为null2.1 官方文档2.2 本地演示3、字段值为null时,sum的值3.1 本地演示4、对非计数类型使用sum函数4.1 本地演示5、结论1、前言项目中的SQL脚本中遇到了select ifnull(sum(字段名),0) from table_name该类型的写法,目的很明确,就是为了在sum值为null,也能够返回数字0;那...
2020-03-22 23:06:15
21384
2
原创 聊聊微信小程序开发中的appid、openid、unionid
文章目录appid定义获取途径用途openid定义获取途径用途unionid定义获取途径用途小程序登录流程最近在开发中涉及到了与小程序的交互需求,所以自己想梳理一下这儿的关系,本文主要讲解appid、openid、unionid的定义、获取途径、以及用途。appid定义小程序唯一凭证,即 AppID,每个小程序都有自己的一个appid获取途径可在「微信公众平台 - 设置 - 开发设置」...
2020-03-02 01:24:32
8664
原创 浅谈Integer的缓存机制原理
来道常见面试题下面程序的输出结果是什么呢?public class IntegerTest { public static void main(String[] args) { Integer a = 100, b = 100, c = 200, d = 200; System.out.println(a == b); System.ou...
2020-02-29 23:48:12
808
原创 魔鬼一月
2020年1月,真是过得惊心动魄,现在还宅在家里为祖国做着自己的贡献,下午刚申请了远程办公。到月底了,不由的回顾了一下整个一月份,还是有些东西可以记录一下的。一、 月度工作总结其实一月份满打满算只工作了将近二十天,但是工作量确实相当的大啊。工作量目前公司的后端开发主力也就是三个人左右,但是最后为了市场的需求,还是硬着头皮尽可能的满足开发周期,每天的晚上九点下班就算是正常下班了,几乎是整天的...
2020-01-31 19:33:15
246
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人