
JavaDev
文章平均质量分 81
java记录dev
-代号9527
逢山开路,遇水搭桥!纸上得来终觉浅,绝知此事要躬行。
展开
-
配置文件拉取的安全问题 + 索引建立影响评估
处理了一个安全工单,业务系统拉取外部配置时,未开启权限校验,比如SpringBoot项目一部分配置放在配置中心Nacos,而通过接口拉取Nacos配置时,不需要权限校验,这样会导致知道项目在配置中心appid的人,可以通过接口随意拉取和更改配置。关键点:安全性 + 环境变量的使用。原创 2025-04-08 16:05:18 · 323 阅读 · 0 评论 -
SpringBoot2.x与SnakeYaml的不兼容问题
刚开始处理这个问题时,先是看到一个帖子下的另一个方案:自己改SnakeYaml2.x的依赖,加上那些被移除但Spring Boot2启动要用的方法和API,然后重新打包后引入。很明显,SnakeYaml版本做了大升级了,一些API被移除了,但我当前的Spring Boot启动又要用到,导致了版本不兼容的问题。于是,直接引入2.0的依赖应该就好了,也不用execution做依赖排除,因为直接依赖优先级高于间接依赖。近期扫描服务中引入的依赖是否有安全漏洞。原创 2025-03-05 20:46:57 · 895 阅读 · 0 评论 -
策略模式环境类的实现方式对比
以后要新增6.x的处理器逻辑,只需新增实现 ClusterMetaDataProcessor 的 Bean,无需修改现有的代码,符合开闭原则。原创 2025-02-26 23:20:53 · 1154 阅读 · 0 评论 -
线程池的使用 + MD5加密 + 枚举类
整理下近期干活儿遇到的一些坑。原创 2025-02-17 20:06:37 · 437 阅读 · 0 评论 -
谷歌浏览器中编辑并重发请求
有时候,需要调整请求参数后,重新发送请求,查看响应,从浏览器搬到Postman太繁琐,可直接在浏览器进行编辑并重发。原创 2024-11-06 15:48:22 · 3579 阅读 · 1 评论 -
ApplicationContextAware接口的用途
Spring 只会自动管理被标注为 Bean 的类,因此,如果类A没有被注册成Bean,那你在类A中,用@Resource注入其他的对象,是不能成功的,哪怕被注入类对象是一个Bean。() 方法,将当前的 ApplicationContext 注入到实现类中,此时,想获取哪个Bean都直接拿就行,就像上面的工具类。如上,A这个类的对象,并不会被Spring管理,因此,不管B这个类是否是一个Bean,上面的注入都不会成功。ApplicationContextAware接口,原创 2024-11-06 00:33:04 · 1009 阅读 · 0 评论 -
Caffeine缓存库的LoadingCache:缓存计算或查询结果
Caffeine 是一个高性能的 Java 缓存库,旨在提供快速、灵活和高效的缓存解决方案。原创 2024-11-01 10:39:51 · 1336 阅读 · 0 评论 -
ConcurrentHashMap的使用场景
,因此,考虑使用ConcurrentHashMap。原创 2024-10-31 19:31:34 · 854 阅读 · 0 评论 -
Java中调用第三方接口
考虑到远程调用可能失败,失败后重试三次,以上面的hutool为例来实现,其余的都一样,主要还是一个是否成功标记位 + 一个计数,successFlag不用voilate,并发安全也不用考虑,线程内部调用的,用到的数存栈里了都。上面的RestTemplate,在调三方接口时挺好用的,但微服务架构下,各个微服务之间调用时,url就不好写,由此,用Feign:一个声明式的http客户端。和getForEntity的区别是,getForObject只有一个响应的内容,响应码、响应头等没有。原创 2024-09-04 01:00:28 · 2555 阅读 · 1 评论 -
同步、异步、回调函数
测试效果的话,就new A(),然后调用其a方法就行,上面代码没有进行必要的日志打印和Thread.sleep模拟异步停顿,可能视觉效果不明显,但意思就是这个意思。此时,方法a调用methodB,没问题,但以后再有方法c调用methodB,但其回调逻辑变了,是call_back_2呢?也即,如果方法a需要在方法b执行完成后,再做一点其余操作,或者说需要对方法b的执行结果进行监听呢 ==> 回调函数。如此,传入对应的Callback接口的实现类,就能在B类中调用对应的回调逻辑,类B一般也就不用更改了。原创 2024-09-02 18:43:21 · 910 阅读 · 0 评论 -
JSON处理库 -- Fastjson
实现FastJson的SerializeFilter接口,进行高度的定制化自定义序列化。PropertyFilter用于序列化时过滤掉特定的属性@Override// 例如,排除所有值为 null 的属性= null;// 示例// 设置属性NameFilter用于序列化时修改字段的名称@Override// 例如,将字段名转为大写ValueFilter用于序列化时,修改字段的值@Override// 例如,将所有字符串值转为大写。原创 2024-09-01 22:16:33 · 1259 阅读 · 0 评论 -
Java分布式锁
一个微服务有多个实例,或者说多个pod,也就有多个JVM,此时,想保证不同实例里的线程同步执行,靠synchronized这种JVM级别的锁就不能实现了,而要通过分布式锁,一种独立于JVM之外的锁原创 2024-08-26 01:21:34 · 1736 阅读 · 2 评论 -
git回退未commit、回退已commit、回退已push、合并某一次commit到另一个分支
在一个分支修改代码后,还没commit提交,不想要这些修改了,想回到刚开始的样子。在一个分支修改代码并commit到了本地仓库,但没push到远程仓库,想回到刚开始的样子。最近一次的push我不要了原创 2024-07-31 13:31:39 · 2020 阅读 · 0 评论 -
系统数据加密传输的实现
针对以上要加密的数据,用户密码处理的流程图如下:修改注册后端接口,用户注册时,提交密码,前端用公钥对密码进行加密后,传到后端服务器。对邮箱名、手机号等信息,可非对称加密,也可使用AES对称加密,实现加密传输,加密落库则可有可无,如果选择了加密落库,可能会影响到之前的userList接口等等,总之明文、密文别转换叉了。修改后端登录接口,登录时,前端传来的密码,解密后传到SpringSecurity框架,如果账户是加密传输的,也需解密,因为框架里要loadUserByUsername,用户名得转换过来。原创 2024-07-10 20:26:04 · 2312 阅读 · 0 评论 -
策略模式 + 抽象工厂实现多方式登录验证
每种登录就是实现登录这个目的的一种策略,因此先想到的应该是策略模式,所有具体策略类所需要实现的接口就是抽象策略类的login方法。其次,前端传不同的type,要调用不同的具体策略类对象,如此,再引入工厂模式。因为不同的第三方供应商系统有不同的认证方式,想实现打通,就要有不同的具体策略类(比如策略类A是通过appid完成认证,策略类B是通过密钥完成认证),因此考虑使用了策略模式。这样写,以后再增加新的登录方式,工厂类还得改,为了解耦,使用配置文件,不同的登录方式的type,对应一个登录方式的具体策略类。原创 2024-06-24 20:02:38 · 1857 阅读 · 0 评论 -
线程池的使用:批量导入、数据汇总、异步保存搜索记录
也可以使用CountDownLatch,线程池的线程每处理一个提交的任务,就让CountDownLatch减一(CountDownLatch初始化等待计数等于批次数),阻塞请求过来的那个线程,直到CountDownLatch减为0,最后统计下总耗时,返回给前端。在一个电商网站中,用户下单之后,需要查询数据,数据包含了三部分:订单信息、包含的商品、物流信息。搜索时,保存历史搜索记录。用户搜索一个keyword时,存历史搜索记录,不能影响到查询的性能,用异步去处理,将存历史记录的任务提交到线程池。原创 2024-06-12 17:08:22 · 1615 阅读 · 0 评论 -
Java后端设置服务器允许跨域
简言之就是发送OPTION请求到服务器,服务器根据预检请求的请求头信息,自行判断是否允许跨域,并把判断结果放到响应的header中返回给浏览器。预检请求的请求头中包含了一些关键信息,例如请求方法、请求头字段、请求的URL等。这个示例中,浏览器向 https://www.example.com 发送了一个OPTIONS请求,用于检查是否允许发送POST请求,并且是否允许包含Content-Type请求头字段。以下通过servlet的Filter给所有响应的header加了一些跨域相关的数据,以实现允许跨域。原创 2024-03-25 17:44:17 · 2840 阅读 · 0 评论 -
拖动排序与置顶的Java实现
整理个需求的实现思路。原创 2024-03-16 09:00:00 · 1223 阅读 · 0 评论 -
用k8s私有化部署docsify做开放API平台
参照模板:【工行的API开放平台】API开放平台,用于给第三方系统做接入用,开放的自然也是用于对接的那部分API。主要有两类:前者简单,后者得考虑鉴权、限流等问题。这类API开放平台不需要考虑在线调用,能展示就行,实现方式可考虑:关于第三种的具体思路:关于API文档内容的维护,可考虑采用上传word文档或者在线富文本框的方式,提到后端,后端转md或其他前端需要的格式后,返回给前端。这种实现类似工行的开放平台,优点是灵活,自己爱咋展示咋展示,维护、上下架接口、编辑、删除都可以做成一个前端页面,可以在线操作,原创 2024-01-25 19:15:53 · 1621 阅读 · 1 评论 -
注解实现校验接口传参是否超出取值范围
Target(ElementType . FIELD) @Constraint(validatedBy = ListValue . ValidIfInRange . class) //借助@Constraint注解实现自定义校验逻辑,validatedBy属性是数组类型,可同时定义多种校验逻辑 @Retention(RetentionPolicy . RUNTIME) @Documented public @interface ListValue {原创 2024-01-17 18:42:02 · 868 阅读 · 0 评论 -
SpringBoot对接支付宝完成扫码支付
需求:系统A对接支付宝,实现支持用户扫码支付。原创 2023-12-22 20:13:08 · 2065 阅读 · 4 评论 -
局部变量类型推断:val和var
翻项目代码,好多地方在用val定义变量,这里整理下。原创 2023-12-11 10:45:28 · 558 阅读 · 0 评论 -
SpringBoot整合ZXing创建二维码和条形码
之前SpringSecurity时,登录用到了图片验证码辅助登录:【】,以下为整合zxing实现二维码和条形码的生成。原创 2023-12-11 09:08:58 · 867 阅读 · 0 评论 -
反射加载SDK完成统一调用
半路接手一个需求,需要从自己系统出发,经过的统一校验和转发,来请求第三方供应商系统的接口,整理下看同事代码学到的一点思路。原创 2023-12-08 11:15:35 · 1060 阅读 · 0 评论 -
@JsonCreator和@JsonValue
此时,前端传个dto(json)过来,dto里有个参数的类型是枚举类型,反序列化json成dto对象时,枚举类型的属性也会反序列化,上面@JsonCreator定义的unSerializer方法执行,就会完成参数合法性校验,Service层省事了。比如一个枚举类的get方法上加上该注解,那么在序列化这个枚举类的对象时,返回的就是枚举对象的这个属性,而不是这个枚举对象的序列化json串。一个类只能用一个,加上这个注解时,该类的对象序列化时就会只返回这个字段的值做为序列化的结果。原创 2023-11-23 09:49:54 · 3260 阅读 · 0 评论 -
Java计算时间差,距结束还有几天几小时几分钟
上面的toHours()方法返回的是时间差全部换算为小时的数值,而不时去掉整天以后的整小时,想获得后者,应该调用toHoursPart()方法原创 2023-11-22 15:28:07 · 1592 阅读 · 2 评论 -
ApplicationContext对象的获取
ApplicationContext 代表 Spring IoC 容器,其中包含应用程序创建的所有 Bean。它负责实例化、配置和创建 Bean。原创 2023-11-07 20:07:50 · 1644 阅读 · 0 评论 -
【Java】cron表达式
L和W可以一起组合在日字段使用。表示当月的最后一个工作日触发事件原创 2023-10-05 18:22:16 · 844 阅读 · 0 评论 -
Java中的Lambda表达式与双冒号::的用法
Lamdba是Java1.8的一大亮点,它会使代码更加简洁通过Lambda,可以代替之前用匿名内部类去实现接口Lambda表达式的本质是一个匿名函数。原创 2023-09-14 11:25:23 · 1642 阅读 · 0 评论 -
Java 正则表达式的用法与实例
Java 正则表达式的用法--邮箱格式验证实例原创 2022-06-15 15:07:07 · 2902 阅读 · 0 评论 -
HttpServletRequest和HttpServletResponse的获取与使用
HttpServletRequest表示请求过来的信息,HttpServletResponse表示所有响应的信息,如果需要修改或设置返回给客户端的信息,则可通过HttpServletResponse对象来设置。除了正常的Tomcat打包传过来的HttpServletRequest和HttpServletResponse对象,也可以在其他地方自己获取。中,然后传递到上图中的service方法(doGet、doPost)中,用于给开发者来编写自己需要的逻辑。途径二:controller层中直接用。原创 2023-08-05 18:13:37 · 7617 阅读 · 0 评论 -
AOP获取切点表达式中注解的属性
自己定义个注解来搭配AOP获取一下,注解有三个属性,value,description和title在service层中的方法上使用这个自定义注解System . out . println("MyService类中的methodOne方法");System . out . println("MyService类中的methodTwo方法");原创 2023-08-04 16:21:40 · 732 阅读 · 0 评论 -
JavaWeb过滤器Filter整理
Filter,过滤器,用于对访问web服务器管理的所有web资源(例如Jsp, Servlet, 静态图片文件或静态html文件)的请求进行拦截并做出处理,从而实现一些特殊的功能,如登录控制,权限管理,过滤敏感词汇放行之前的代码:对请求进行第一次过滤,然后交给后面的代码放行:将游览器请求放行,如果还有过滤器,那么就继续交给下一个过滤器放行后的代码:对返回的Web资源再次进行过滤处理通过Filter技术,开发人员可以实现用户在访问某个目标资源之前,对访问的请求和响应进行拦截。原创 2023-07-23 23:57:05 · 883 阅读 · 0 评论 -
Java序列化与反序列化
什么是序列化与反序列化?序列化与反序列化的作用。什么是序列化版本号?IDEA中没有生成序列化版本号的选项原创 2023-07-02 01:33:34 · 393 阅读 · 0 评论 -
【Git】checkout切换分支后,原分支的代码被带到了切换后的分支
checkout切换分支后,原分支的代码被带到了切换后的分支原创 2023-06-28 10:17:14 · 3522 阅读 · 4 评论 -
Java枚举中定义属性
看到枚举中定义属性就很看不惯。这里梳理下Java枚举中定义属性,以及枚举在开发中的实际应用举例。枚举中枚举类的语法结构虽然和普通类不一样,但是经过编译器之后产生的也是一个class文件。该class文件再反编译回来可以看到实际上是生成了一个类。该类继承了//java为单继承原创 2023-06-01 23:45:20 · 3199 阅读 · 2 评论 -
树形结构的表设计与Java接口实现
定义返回给前端的vo类,核心属性//伪代码 //假设树形结构表的PO类叫TreePo @Data public class TreeVo extends TreePo {} //注意这里childrenTreeNodes类型为TreeVo,而不是TreePo,因为你儿子也有自己的儿子} }原创 2023-05-26 22:55:32 · 2551 阅读 · 2 评论 -
Java泛型--Java中的E、T、?
我看到集合中放进去了一个Integer类型的数据,但我get(index)拿到的是Object类型,必须向下转型为Integer。Object类型可以接收任意类型,但实际应用中会有类型转换的问题。T只能用extends来限定缩小范围,而?,也就是上面总结的。泛型方法,即调用时才指明泛型的具体类型。和 T,声明了T类型以后,T可以操作,而?引入泛型,即为集合中的元素指定一个统一的类型。实例化后,恢复成只能add类A和其子类。实例化时的类只能是类型A及其父类型。后面有内容再补吧,?原创 2023-04-20 13:57:57 · 5647 阅读 · 0 评论 -
Java中的null总结
🍁 判断一个引用数据类型是否为null...基本数据类型的包装类,若值为null,则拆箱后发生空指针异常原创 2023-04-18 00:02:26 · 1356 阅读 · 0 评论 -
什么是幂等性
使用全局唯一的主键,常用于解决Insert的幂等性。和Token相对的,使用请求序列号,即每次向服务端请求时候附带一个短时间内唯一不重复的序列号,该序列号可以是一个有序 ID,也可以是一个订单号。实现幂等,同时也增加了服务端的逻辑和成本,实际开发中,应该结合具体的场景,考虑是否引入幂等性。客户端连续点击或者调用方的超时重试等情况,例如提交订单,此种操作就可以用 Token 的机制实现防止重复提交。SQL1和SQL2不管执行多少次,结果和对库表的影响都是一样的,属于天然的幂等,而SQL3则不幂等。原创 2023-04-09 23:16:01 · 967 阅读 · 0 评论