SpringBoot整合Hutool自定义注解实现数据脱敏
什么是数据脱敏数据脱敏(Data Masking),也称为数据遮蔽或数据隐藏,是一种数据保护技术,用于处理和存储敏感数据时,以减少或消除数据中的敏感信息,从而保护数据的隐私和安全。数据脱敏的主要目的是在保持数据可用性的同时,减少数据泄露和滥用的风险。数据脱敏一般指数据库正常存储,返回前端时进行数据库处理!
Hutool简介Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅。Hutool是项目中“util”包友好的替代,它节省了开发人员对项目中公用类和公用工具方法的封装时间,使开发专注于业务,同时可以最大限度的避免封装不完善带来的bug。虽然Hutool可能会有一些bug,比起小编写的还是强上不少的,所以选定它来!现在最新版为:5.8.16,我们直接使用最新的,bug会少一些,功能会完善一些!支持的脱敏规则:
用户id
中文姓名
身份证号
座机号
手机号
地址
电子邮件
密码
中国大陆车牌,包含普通车辆、新能源车辆
银行卡
实战整合导入依赖<dependency> <group ...
Jenkins-Docker
d48bd0ddc063aeaf3bab315a49123e70ffa7da57bf41fc98c48d8148adab7704caeb0af84501eeda033f87f129f8f297dd50dc1bf7829ed957912d2b3d48492e68e866e68ad0a6a104e8bcde9ed5b64b21a9e08b9675d6214fa006de804ed08b5f77542ef3eeeac6f0112534aafba4549fb348159971e5e91d93d40bda8c792774790bc3b0737b7b6365b0cab6657dcd0430659ce63859cb32731854cefb98c0b5f38c0c76be4bd4b8de3f4716ae2186ab0d35f3384e303ec525eda395b958bf45704040aeee646bf468b9fa25f0b9b0890200725fa57d9560e719296a48fc63dc3e3fec033d0c5133fcffc250aa81c74fdcfee73bc55a7ed ...
Spring如何解决循环依赖
前言Spring的解决循环依赖是有前置条件的,要解决循环依赖我们首先要了解Spring Bean对象的创建过程和依赖注入的方式。
什么是循环依赖通俗来讲,就是A依赖B或者B依赖A,或者C依赖自己本身,或是三个以上,例如A依赖B,B依赖C,C又依赖A。如下图:
Spring实例Bean的本质Spring在实例化一个bean的时候,是首先递归的实例化其所依赖的所有bean,直到某个bean没有依赖其他bean,此时就会将该实例返回,然后反递归的将获取到的bean设置为各个上层bean的属性的。
循环依赖主要场景
什么情况下循环依赖可以被解决
Spring解决循环依赖是有前置条件的
出现循环依赖的Bean必须要是单例(singleton),如果依赖prototype则完全不会有此需求。依赖注入的方式不能全是构造器注入的方式。
解决方式Spring是通过三级缓存来解决上述问题的:
一级缓存: singletonObjects存储的是所有创建好了的单例Bean二级缓存:earlySingletonObjects完成实例化,但是还未进行属性注入及初始化的对象三级缓存:singletonFacto ...
Docker-jar包镜像部署
jar项目打包成docker镜像部署介绍部署jar项目,可以mvn clean package之后,直接放到启动路径下即可,今天给大家介绍创建docker镜像,使用docker镜像启动容器运行部署jar项目的方式,可以尝试尝试,原理和使用直接拖动部署一样,不过是使用的docker容器而已,内部还是使用的是jdk作为基础镜像。
docker安装可以参考docker-linux安装教程
编写dockerfile并发布FROM maven:3.6.3-openjdk-11-slim AS builderWORKDIR "/server"# 主要文件COPY ./settings.xml /tmp/ck-web-back/settings.xmlCOPY ./pom.xml /tmp/ck-web-back/pom.xmlCOPY ./src /tmp/ck-web-back/src/# package jarRUN cd /tmp/ck-web-back && mvn clean package --settings ./settings.xml -Dm ...
Spring AOP
AOP的定义AOP (Aspect Orient Programming),直译过来就是 面向切面编程,AOP 是一种编程思想,是面向对象编程(OOP)的一种补充。
面向切面编程,实现在不修改源代码的情况下给程序动态统一添加额外功能的一种技术,如下图所示:
AOP可以拦截指定的方法并且对方法增强,而且无需侵入到业务代码中,使业务与非业务处理逻辑分离,比如Spring的事务,通过事务的注解配置,Spring会自动在业务方法中开启、提交业务,并且在业务处理失败时,执行相应的回滚策略。
AOP的作用AOP 采取横向抽取机制(动态代理),取代了传统纵向继承机制的重复性代码,其应用主要体现在事务处理、日志管理、权限控制、异常处理等方面。
主要作用是分离功能性需求和非功能性需求,使开发人员可以集中处理某一个关注点或者横切逻辑,减少对业务代码的侵入,增强代码的可读性和可维护性。
简单的说,AOP 的作用就是保证开发者在不修改源代码的前提下,为系统中的业务组件添加某种通用功能。
AOP的应用场景AOP可以拦截指定的方法,并且对方法增强,比如:事务、日志、权限、性能监测等增强,而且无需侵入到业务代码中, ...
浏览器缓存
定义
浏览器缓存(Brower Caching)是浏览器在本地磁盘对用户最近请求过的文档进行存储,当访问者再次访问同一页面时,浏览器就可以直接从本地磁盘加载文档。
浏览器是如何判断是否使用缓存的
1.浏览器第一次加载资源,服务器返回200,浏览器将资源文件从服务器上请求下载下来,并把response header及该请求的返回时间一并缓存;
2.下一次加载资源时,先比较当前时间和上一次返回200时的时间差,如果没有超过cache-control设置的max-age,则没有过期,命中强缓存,不发请求直接从本地缓存读取该文件(如果浏览器不支持HTTP1.1,则用expires判断是否过期);如果时间过期,则向服务器发送header带有If-None-Match和If-Modified-Since的请求
3.服务器收到请求后,优先根据Etag的值判断被请求的文件有没有做修改,Etag值一致则没有修改,命中协商缓存,返回304;如果不一致则有改动,直接返回新的资源文件带上新的Etag值并返回200;;
4.如果服务器收到的请求没有Etag值,则将If-Modified-Since和被请求文件 ...
for、forEach和map的区别?
for和forEach的不同点
for 循环可以使用 break 跳出循环,但 forEach 不能。
for 循环可以控制循环起点(i初始化的数字决定循环的起点), forEach 只能默认从索引 0 开始。
for 循环过程中支持修改索引(修改 i ),但 forEach 做不到(底层控制 index 自增,无法左右它)。
map和foreach的共同点
都是循环遍历数组中的每一项。
forEach()和map()里面每一次执行匿名函数都支持3个参数:数组中的当前项item,当前项的索引index,原始数组input。
匿名函数中的this都是指Window。
只能遍历数组。
map和foreach的不同点
forEach():没有返回值,即返回值为undefined理论上这个方法是没有返回值的,仅仅是遍历数组中的每一项,不对原来数组进行修改;但是可以自己通过数组的索引来修改原来的数组,或当数组项为对象时修改对象中的值;
map():有返回值,可以return 出来。区别:map的回调函数中支持return返回值;return的是啥,相当于把数组中的这一项变为啥(并不影响原来的 ...
简述异步线程,轮询机制,宏任务微任务?
定义
同步任务: 指的是在主线程上排队执行的任务,只有前一个任务执行完毕,才能执行后一个任务。异步任务: 指的是不进入主线程,某个异步任务可以执行了,该任务才会进入主线程执行。
同步和异步任务在不同的执行”场所”,同步的进入主线程,异步的进入Event Table执行并注册函数。
当指定的异步事情完成时,Event Table会将这个函数移入Event Queue。
主线程内的任务执行完毕为空,会去Event Queue读取对应的函数,推入主线程执行。
js引擎的monitoring process进程会持续不断的检查主线程执行栈是否为空,一旦为空,就会去EventQueue那里检查是否有等待被调用的函数。上述过程会不断重复,也就是常说的Event Loop(事件循环也可以叫事件轮询)。
宏任务(macrotask )和微任务(microtask )macrotask 和 microtask 表示异步任务的两种分类。在挂起任务时,JS 引擎会将所有任务按照类别分到这两个队列中,首先在 macrotask 的队列(这个队列也被叫做 task queue)中取出第一个任务,执行完毕后 ...
什么是PromiseLike?
PromiseLike是一个用于表示类似于Promise的对象的接口
代码实现/** * 判断一个值是不是PromiseLike */function isPromiseLike(value) { return (value !== null && (typeof value === 'object' || typeof value === 'function') && typeof value.then === 'function')}
Docker-静态资源镜像部署
Vue项目打包成docker镜像部署(以vue举例)介绍部署Vue项目,可以build之后,直接放到nginx下面即可,今天给大家介绍创建docker镜像,使用docker镜像启动容器运行部署Vue项目的方式,可以尝试尝试,原理和使用nginx部署一样,不过是使用的docker容器而已,内部还是使用的是nginx作为基础镜像。
docker安装可以参考docker-linux安装教程
编写dockerfile并发布# dokcerfile# build stageFROM node:lts-alpine as build-stageWORKDIR /appCOPY package*.json ./# sass单独设置拉取地址(速度快的话可以不用)RUN npm set sass_binary_site https://npm.taobao.org/mirrors/node-sassRUN npm config set registry https://registry.npm.taobao.org/RUN npm installCOPY . .RUN npm run build# pr ...