
解决方案
春风化作秋雨
学而思,思而学
展开
-
接口调用token设计与实现方案
调用方,从服务方获取token,作为调用API接口的第一步,相当于创建一个登录凭证,其它的业务API接口,都需依赖于token来鉴权调用者身份,即实现接口调用的认证和鉴权。原创 2024-03-06 15:05:08 · 915 阅读 · 0 评论 -
登录失败重试次数安全设计方案
1、无论是账号还是密码错误,统一提示:用户名或密码错误,账号剩余登录次数N!2、同一账号连续登录失败5次,锁定该账号5分钟,5分钟后可以再重试登录。开发设计 key:PICC_USER_LOGIN_FAIL_TIMES_用户名 ,value 记录 登录失败次数。失效时间为24小时,每次登录失败累加1并重置失效时间24小时。3、账号被锁定后,再登录则提示:账号锁定5分钟,请稍后再试!(至于剩余多长时间不提示)4、登录成功或账号锁定期限解除,即在缓存里面删除,连续登录失败次数重新计算。原创 2024-03-06 14:27:22 · 828 阅读 · 0 评论 -
实时会话简易版
Redis缓存、pgsql数据库。原创 2023-08-17 17:31:10 · 356 阅读 · 0 评论 -
consul删除无效服务节点
1、如图所示,直接注册过的服务已经废弃,但依然在显示。如果环境端口未对外开放可以在服务器上直接执行。2、删除无效服务节点。原创 2023-06-10 23:17:55 · 2542 阅读 · 0 评论 -
clickhouse修改数据存储目录
clickhouse默认数据目录在 /var/lib/clickhouse。停止数据库后,移走该目录再软连接回原地址;即无需修改config.xml实现对数据目录的修改。原创 2023-02-08 11:04:59 · 4722 阅读 · 0 评论 -
logstash向es同步数据报错:retrying failed action with response code: 403 ({“type“=>“cluster_block_exce
经过排查发现是服务器磁盘空间满了导致es索引为只读状态。1、清理磁盘,空出更大磁盘空间或直接扩充磁盘空间。原创 2023-02-03 10:35:20 · 2037 阅读 · 1 评论 -
Cron表达式设置永不执行
说明:此表达式是指2月31日执行,但是该日期不存在,所以永远不会执行。原创 2023-02-02 09:17:38 · 6077 阅读 · 1 评论 -
elasticsearch查询异常解决方案
elasticsearch设置了密码,需要携带账号和密码。请求的url携带账号和密码。原创 2023-01-20 10:15:15 · 3123 阅读 · 0 评论 -
使用URL访问elasticsearch携带用户名和密码
账号:elastic。原创 2023-01-20 10:12:19 · 2931 阅读 · 0 评论 -
SpringBoot敏感配置加密:Jasypt
项目配置文件中的各项密码(数据库, MQ, Redis等),甚至账号,在生产环境下存明文,不安全,不专业。生成密文:AGPfBU48BnGiwsaMeMC/Vg==后续给出在代码中如何使用。原创 2022-12-08 22:29:45 · 535 阅读 · 0 评论 -
java 多线程使用 join() 方法让主线程等待
java 多线程使用 join() 方法让主线程等待原创 2022-10-10 16:55:00 · 316 阅读 · 0 评论 -
java中join()方法理解与应用
java中,join()方法的作用是阻塞,即当前线程等待线程结束,才继续执行。线程T1执行至1, 进行中。线程T1执行至2, 进行中。线程T1执行至3, 进行中。线程T1执行至4, 进行中。线程T1执行至5, 进行中。线程T2执行至1, 进行中。线程T3执行至1, 进行中。线程T3执行至2, 进行中。线程T2执行至2, 进行中。线程T2执行至3, 进行中。线程T3执行至3, 进行中。线程T3执行至4, 进行中。线程T2执行至4, 进行中。线程T3执行至5, 进行中。线程T2执行至5, 进行中。原创 2022-10-10 16:25:18 · 500 阅读 · 0 评论 -
java 有锁和无锁实现线程交替执行与对比
【代码】java 有锁和无锁实现线程交替执行与对比。原创 2022-10-10 14:39:30 · 250 阅读 · 0 评论 -
java控制台打印表格
java控制台打印表格原创 2022-10-10 10:05:03 · 1790 阅读 · 0 评论 -
java获取对象属性名称与属性值
student:name=张明;height=181;user:gender=男;3、UserInfo类。2、Student类。原创 2022-10-10 10:00:24 · 5597 阅读 · 0 评论 -
java 使用多线程池异步处理不同业务
【代码】java多个线程池分别异步处理不同业务。原创 2022-10-10 09:52:05 · 757 阅读 · 0 评论 -
java 实现线程间通信
thread_A 打印:thread_B已完成自增1,目前num=10,请知晓!thread_B 打印:thread_A已完成自增1,目前num=11,请知晓!thread_B 打印:thread_A已完成自增1,目前num=1,请知晓!thread_A 打印:thread_B已完成自增1,目前num=2,请知晓!thread_B 打印:thread_A已完成自增1,目前num=3,请知晓!thread_A 打印:thread_B已完成自增1,目前num=4,请知晓!thread_A 结束!原创 2022-09-13 15:17:03 · 315 阅读 · 0 评论 -
使用Spring序列化工具进行json序列化/反序列化
{"name":"张三 ","gender":"男","age":20}1、针对阿里fastjson安全漏洞频发,经常临时升级乃至不兼容问题。2、使用Spring自身序列化工具进行json序列化/反序列化。User(name=张三 , gender=男, age=20)3、分装成单例的工具类,代码如下。原创 2022-09-11 20:11:01 · 1313 阅读 · 0 评论 -
Java stream 实现 List<String> 转List<Long>
本文提供了三种方式,请自行参考import org.apache.commons.lang.ArrayUtils;import javax.swing.plaf.synth.SynthOptionPaneUI;import java.util.ArrayList;import java.util.Arrays;import java.util.List;import java.util.stream.Collectors;import java.util.stream.Stream;原创 2022-02-22 15:31:01 · 17624 阅读 · 0 评论 -
Java8 stream().map() 修改元素
Java8 stream().map() 是一个中间操作,可实现对元素进行修改,这意味着它返回Stream对象。代码实现:package com.collectStream;import lombok.Data;import java.util.ArrayList;import java.util.Arrays;import java.util.Comparator;import java.util.List;import java.util.stream.Collectors;原创 2022-02-22 14:29:35 · 11902 阅读 · 1 评论 -
Java8 stream().filter() 过滤应用
Java8及以上版本中,使用stream().filter()来过滤一个List对象,查找符合条件的对象集合。代码实现:import lombok.Data;import java.util.ArrayList;import java.util.Arrays;import java.util.List;import java.util.stream.Collectors;public class TestStreamFilter { public static void so原创 2022-02-22 14:13:57 · 39535 阅读 · 0 评论 -
Java stream().sorted() 排序应用
Java 8中 Stream 的 sorted() 可实现按照自然排序,也可使用 Comparator 提供的排序对流进行排序;支持使用 lambda 表达式进行实例化;还可实现反转自然排序。1、sorted() 使用按自然升序对集合进行排序,默认是升序排列;使用 Comparator 提供 reverseOrder() 方法实现降序排列。list.stream().sorted() .stream().sorted();list.stream().sorted(Comparator.re原创 2022-02-22 13:56:34 · 38066 阅读 · 5 评论 -
Spring中的@Qualifier与@Primary
使用场景:Spring匹配到多个可用的bean。1、@Qualifier 注解使用@Qualifier("bean名称")指定具体需要注入的 bean;这种方式控制方在使用方。public interface UserService {}@Servicepublic class UserService1 implements UserService {}@Servicepublic class UserService2 implements UserService {}原创 2022-02-22 09:49:01 · 470 阅读 · 0 评论 -
Thread.sleep(0) 的作用
使用场景:Java 采用抢占式的线程调度算法,因此可能会出现某条线程常常获取到 CPU 控制权的情况。解决方案:为让某些优先级较低的线程也能获取到 CPU 控制权,可使用 Thread.sleep(0) 触发一次操作系统分配时间片的操作,这也是平衡 CPU 控制权的一种操作。...原创 2022-02-21 10:17:33 · 616 阅读 · 0 评论 -
使用使用线程池的好处
不使用线程池,每个线程都要通过 new Thread(xxRunnable).start()的方式来创建并运行。线程数量少的情况下,可如此使用。然而,现实环境下可能需要开启多个线程让系统和程序运行达到最佳效率。1、单独创建线程潜在问题当线程数达到一定数量就会耗尽系统的 CPU 和内存资源,也会造成 GC频繁收集和停顿。每次创建和销毁一个线程都是要消耗系统资源的,如果为每个任务都创建线程这无疑是一个很大的性能瓶颈。2、使用线程池可进行优化1、线程池可控制线程数量,避免线程泛滥。2、线程池原创 2022-02-21 09:30:13 · 600 阅读 · 0 评论 -
java redis 实现多线程资源复用
1、测试类package com.redis.resource;import org.assertj.core.util.Lists;import org.junit.jupiter.api.Test;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.data.redis.core.ListOperations;import org.springframework.d原创 2022-01-17 16:16:48 · 999 阅读 · 0 评论 -
java BlockingQueue 实现多线程资源复用
1、测试主类package com.queues;import com.google.common.collect.Lists;import java.util.List;import java.util.concurrent.*;public class LineBlockingQueueTest { public static void main(String[] args) { List<String> list = Lists.newArra原创 2022-01-17 14:31:02 · 430 阅读 · 0 评论 -
Spring 注解 @Qualifier
场景一:注入指定名称的bean具体场景:当创建了多个同一类型的 bean 时,但是其他地方注入时候,只需其中一个。此情况,可使用 @Qualifier 注解和 @Autowired 注解通过指定哪一个真正的 bean 将会被装配来消除混乱。实现如下: @Autowired @Qualifier("user1") private User user;同等实现方式如下: @Resource(name="user1") private User user;场景原创 2022-01-13 23:04:11 · 251 阅读 · 0 评论 -
只读事务与不使用事务的区别
1、效果不同1、不使事务:通常情况下查询其他事物已提交的数据。2、只读事务:从事务开始一直到这个事务结束,整个过程中,其他事务所提交的数据,该事务都忽略。即查询过程中,不会查询到该事物开启之后提交的数据。2、适用场景不同1、单条sql语句的查询,不必启用只读事务数据库默认支持单条SQL语句执行期间的读一致性。2、多条sql语句的查询,需要启用只读事务此种场景要求多条SQL查询出的数据必须保证整体一致性,需要启用只读事务。原因:在前面SQL查询执行结束,接下来执行后续SQL查询原创 2022-01-13 21:57:42 · 2778 阅读 · 0 评论 -
Executors 框架
Executors 框架,是一个根据一组执行策略调用、调度、执行和控制的异步任务的框架。不使用线程池,创建线程数量不加控制或控制不当,会导致应用程序内存溢出。所以,创建线程池是一个很好的解决方案。它可以限制核心线程数量,还可以回收再利用使用结束的线程。利用Executors 框架可以非常方便的创建一个线程池。Executors类源码如下:package java.util.concurrent;import java.lang.Thread.UncaughtExceptionHandler原创 2022-01-12 21:47:31 · 515 阅读 · 0 评论 -
Spring @EnableAsync &@Async实现方法异步调用 方式二:通过实现AsyncConfigurer接口
1、测试类package com.async;/** * Created by Liuxd on 2018-09-11. */import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.Con原创 2022-01-07 16:55:52 · 818 阅读 · 0 评论 -
Spring @EnableAsync &@Async 实现方法异步调用 方式一
1、异步测试类package com.async2;import org.springframework.context.annotation.AnnotationConfigApplicationContext;public class AsyncTest { public static void main(String[] args) { AnnotationConfigApplicationContext context = new AnnotationConf原创 2022-01-07 16:44:08 · 285 阅读 · 0 评论 -
Redis 常见性能问题解决
1、主服务器写内存快照,会阻塞主线程的工作,当快照比较大时对性能影响是非常大的,会间断性暂停服务。解决方案:主服务器最好不要写内存快照。2、Redis 主从复制的性能问题解决方案:为了主从复制的速度和连接的稳定性,主从库最好在同一个局域网内。...原创 2021-12-28 21:16:20 · 760 阅读 · 0 评论 -
Redis 内存优化
使用 Redis 的散列表:hash,把相关的信息放到散列表里面存储,而非把每个字段单独存储,如此可有效的降低内存使用,查询效率也高。举个例:将系统查询vo对象列表,存放到散列表,再整体存储到 Redis。可以考虑key:vo对象json串,返回给前端也无需反序列化和序列化。...原创 2021-12-28 21:12:45 · 228 阅读 · 0 评论 -
如何确保证缓存和数据库数据的一致性
1、合理设置缓存的过期时间,击穿后自动加锁更新缓存数据。2、定期更新缓存数据,配合设置过期时间。3、新增、修改、删除数据库操作时同步更新 Redis,可使用事物机制来保证数据的一致性。...原创 2021-12-27 22:16:18 · 163 阅读 · 0 评论 -
跨域解决方案
1、服务器端整体,支持跨域,设置 CORS 等于 *。2、服务器端API接口,使用注解 @CrossOrigin 允许跨域访问。3、前端,使用 jsonp 跨域。原创 2021-12-18 22:30:36 · 267 阅读 · 1 评论 -
如何预防 CSRF 攻击
1、CSRF 攻击CSRF:Cross-Site Request Forgery(中文:跨站请求伪造),可理解为攻击者盗用某用户的身份,以此用户的名义发送恶意请求,比如:发送邮件、发消息、购买商品,虚拟货币转账等。2、防御措施1)验证请求来源地址。2)关键操作添加验证码进行验证。3)在请求地址或heder中添加 token ,后台进行验证。...原创 2021-12-17 22:12:05 · 2056 阅读 · 1 评论 -
避免sql注入的方法
1、使用预处理 PreparedStatementmybatis防止sql注入:# 将sql进行预编译sql,然后底层再使用PreparedStatement的set方法进行参数设置。$ 将传入的数据直接将参数拼接在sql中。#与$相比,#可以很大程度的防止sql注入,因为对sql做了预编译处理。2、使用正则表达式过滤掉字符中的特殊字符即对你参数进行合理教研,避免sql拼接恶意脚本。...原创 2021-12-17 22:00:20 · 802 阅读 · 1 评论 -
解决客户端禁止 cookie情况下实现session
背景:通常情况下,客户段依赖 cookie 存储 sessionId。问题:客户端禁用了cookie 。方案:通过使用在请求url中添加参数sessionId的方式,实现每次请求都携带sessionId,从而保证 session的正常使用。...原创 2021-12-16 23:23:00 · 741 阅读 · 0 评论 -
spring boot通过升级log4j2解决远程代码执行漏洞
1、升级log4j2到最新版版首先,查看springboot默认依赖log4j2版本,如下是版本:2.12.1。确定是受影响版本:Apache Log4j 2.x <= 2.15.0-rc22、处理方案pom.xml 中添加:<log4j2.version>2.16.0</log4j2.version> <properties> <okhttp.version>3.13.1</okhttp..原创 2021-12-15 21:32:06 · 547 阅读 · 0 评论