Spring
文章平均质量分 63
月犹依依
RPG、Flow、Loop & Zoom! Have fun every day~
一天一天成长为架构师~
展开
-
JWT身份认证
文章目录参考项目方案参考JWT概念:JWT认证解决问题、原理、数据结构、特点JWT认证与常见认证方式概念:1、2章节部分自定义JWT生成以及解码工具SpringSecurity配置JWT校验过滤器:3章节部分:过滤器链与完成认证后放入responseSpringSecurity配置用户完成身份认证后返回JWT:完成认证后在response中放入token信息传给前端实际项目:SSO与JWT结合项目方案需求:内部服务需要开放一个外部接口供业务方调用,因此涉及到业务方身份认证、权限识别问题原创 2021-11-11 12:00:15 · 1202 阅读 · 0 评论 -
Spring Retry:RetryTemplate
文章目录参考概念总结实际demo参考核心学习文章:Spring(34)——Spring Retry介绍简略版:重试框架Spring retry实践、很好的Spring学习专栏概念总结RetryOperations:Spring重试接口RetryTemplate:RetryOperations的Spring默认实现RetryPolicy:重试机制接口SimpleRetryPolicy:RetryPolicy的Spring默认实现核心学习文章中第一部分介绍了所有的policy以及使用实例原创 2021-10-19 19:51:38 · 997 阅读 · 0 评论 -
Spring中获取request和response
文章目录参考方法demo参考spring中获取request和response方法// 1,直接参数获取@RequestMapping("/path")public String getReqAndRes(HttpServletRequest request, HttpServletResponse response){/** 相关业务代码 此时可以直接使用request response对象 */}// 2,在代码里面获取可以通过RequestContextHolder的静态方法get原创 2021-10-19 16:49:20 · 705 阅读 · 0 评论 -
SpringMVC ExceptionHandler原理与入参以及返回值
文章目录源码 & 原理入参与返回值源码 & 原理https://juejin.cn/post/6844903815859322893Spring入参与返回值https://blog.csdn.net/j510924/article/details/51130853?ops_request_misc=%7B%22request%5Fid%22%3A%22163100093516780264072172%22%2C%22scm%22%3A%2220140713.130102334..%原创 2021-09-13 12:55:12 · 1949 阅读 · 0 评论 -
定时任务一种实现架构 & 调试方法
服务启动类@Slf4j@EnableCaching@EnableAsync@SpringBootApplication(scanBasePackages = {"com.a.b"})public class TaskApplication implements CommandLineRunner { // Spring的应用上下文 @Resource private ConfigurableApplicationContext context; @Resource原创 2021-09-02 19:42:33 · 531 阅读 · 0 评论 -
HTTP接口签名校验
文章目录为什么要签名校验常用签名校验算法实例为什么要签名校验一般对外的http接口加签的目的是防止数据被篡改。举个例子,A正在某银行网站给B转账,转入卡号和金额输入完成后生成请求报文,然后加密报文传送给银行后台。银行收到请求后,解密得到明文,然后解析得到B的卡号和转账金额等信息,继续走后续转账流程。如果传输使用对称加密算法(最常用的),客户端和服务端都是用同一个对称密钥,那么这个对称密钥就存在泄露的可能性。一旦泄露,攻击者X可以截获正常的报文,解密后替换卡号和金额,然后重新用同一个密钥加密被篡改的报原创 2021-08-31 21:53:23 · 1104 阅读 · 0 评论 -
HttpServletRequestWrapper的使用:二次封装/处理Request
ResponseWrapper同理背景有段程序使用Http的方式与业务方交互,而且是明文传输数据。我方的代码已经打包放在服务器上运行了很长时间,这时突然要求修改数据传输的方式,要求加密后再传输,而我方的原有的代码不能改变,以防止引发其它问题。如何在不修改我方现有的代码的前提下,满足合作商的要求?技术方案采用Filter+HttpServletRequestWrapper就可以解决这个问题。首先:在filter中拦截到加密后的请求,将参数解密,然后组装成一个新的明文请求串。然后:重写HttpSe转载 2021-08-31 13:00:03 · 3795 阅读 · 0 评论 -
@Mapper注解:Mybatis避免写xml与实体间字段关系映射
文章目录参考与详细原理实例支持使用注解来配置映射的sql语句,这样可以省掉映射器xml文件。参考与详细原理@Mapper注解详解:使用方法、源码https://mynamelancelot.github.io/mybatis/mapper.html使用注解配置Mapperhttps://blog.csdn.net/soonfly/article/details/67640653实例Application配置指定mapper文件扫描位置@MapperScan作用:指定要变成实现类的接口所在原创 2021-08-31 12:55:09 · 770 阅读 · 0 评论 -
Spring Boot拦截器以及常用拦截器demo
文章目录用途代码用途在 Spring中,当请求发送到 Controller 时,在被Controller处理之前,它必须经过 Interceptors(0或多个),背后是一种责任链的设计模式。Spring Interceptor是一个非常类似于Servlet Filter 的概念 。典型通途:日志记录:记录请求信息的日志,以便进行信息监控、信息统计、计算 PV(Page View)等;权限检查:如登录检测,进入处理器检测是否登录;性能监控:通过拦截器在进入处理器之前记录开始时间,在处理完后记原创 2021-08-30 12:41:26 · 335 阅读 · 0 评论 -
Spring Boot使用CommonsRequestLoggingFilter记录传入的请求
原理Spring 自带 AbstractRequestLoggingFilter,在处理请求之前和之后执行日志记录操作,这个过滤器需要一个子类来覆盖beforeRequest(HttpServletRequest, String)和afterRequest(HttpServletRequest, String)方法来执行围绕请求的实际日志记录。Spring 提供了以下 2 个实现 AbstractRequestLoggingFilterCommonsRequestLoggingFilterServ原创 2021-08-26 09:28:49 · 1991 阅读 · 0 评论 -
logback开启异步打印
文章目录参考原理真实配置参考https://blog.csdn.net/qq496013218/article/details/76603779原理ch.qos.logback.classic.AsyncAppender是logback的一个异步打印实现类,指明使用该类打印日志即开启了异步打印功能。当Logging Event进入AsyncAppender后,AsyncAppender会调用appender方法。append方法在将event填入Buffer(这里选用的数据结构为BlockingQ原创 2021-08-26 09:22:16 · 1240 阅读 · 0 评论 -
Spring导入其他sdk包中依赖Spring的组件
文章目录参考背景@Configuration等注解的自动注入及@ComponentScan的组件扫描@SpringBootApplication启动类最后解决参考参考:https://blog.csdn.net/weixin_41540822/article/details/88852973背景A服务引入B服务提供的SDK包中的某个util方法,结果报了NPEdebug发现,B服务util方法依赖Spring注入,由于A服务启动时此类不在Spring Boot的组件扫描范围之内,没能完成util方原创 2021-08-24 10:51:28 · 631 阅读 · 0 评论 -
多个ExceptionHandler类的执行顺序
文章目录背景解决方案代码背景2个服务:A-common 和 BService,各自有异常处理器。其中A中定义了通用的异常处理器,供所有服务直接调用。但是B服务由于业务需求需要处理一些A中没有的异常,由于A中存在兜底逻辑:对Exception进行捕获,这个时候就要指定异常处理器的执行顺序。解决方案Spring的异常处理器是根据异常处理器被加载的顺序来顺序执行,比如:A->B->C ,如果B拦截并且处理了某个异常,就会直接抛出,C的异常处理器就执行不到了。可以通过 @Order 注解来原创 2021-08-24 10:28:40 · 4778 阅读 · 0 评论 -
logback日志pattern中配置日志截断
logback日志格式log pattern中配置日志截断参考实例参考SpringBoot的默认配置:https://www.jianshu.com/p/cef63c21f415默认在default.xml中配置了logback的FILE_LOG_PATTERN语法:http://thxopen.com/java/2019/04/12/limit-message-size-in-logback.html<pattern>%-4relative [%thread] %-5level -原创 2021-08-10 18:24:32 · 1701 阅读 · 0 评论 -
Spring @Value注解
Spring @Value注解简介实例代码简介最常用注解之一,用于从配置文件中读取变量值。需要注意的坑:如果配置文件中没有该环境变量,Spring服务将会报异常,无法启动。解决:设置默认值,结合Validate在业务代码中handle无环境变量的问题。新增环境变量注意影响范围,如果同时影响多个微服务的包时,每个微服务的配置文件都要补充环境变量。实例代码yaml配置文件设置环境变量:spring: profiles: boe http: multipart: m原创 2021-07-23 10:07:09 · 190 阅读 · 0 评论 -
Spring Controller注解@RequestBody解决接收不到前端传参
入参前新增@RequestBody,即可破解@PostMapping("/group/add/")public SingleResponse addMember(@RequestBody MyRequest request) {}原创 2021-07-22 18:42:43 · 982 阅读 · 0 评论 -
Spring缓存@Cacheable 使用详解
Spring缓存@Cacheable 使用详解参考核心代码参考https://juejin.cn/post/6959002694539444231缺点:单机版本,非分布式。可以使用内存作为cache也可以使用redis。核心代码配置:@Configurationpublic class CacheConfig implements CachingConfigurer { @Override @Bean public CacheManager cacheManager原创 2021-07-15 21:23:14 · 3624 阅读 · 0 评论 -
使用Spring的ApplicationListener实现领域事件
使用Spring的ApplicationListener实现领域事件参考核心类参考https://www.cnblogs.com/lwcode6/p/12072202.html缺点:单机版本,各个服务器自己处理自己产生的领域事件。核心类通过ApplicationEvent类(事件)和ApplicationListener接口(事件处理),可以实现ApplicationContext事件处理事件定义:// 事件基类public abstract class DomainEvent<T&g原创 2021-07-15 20:46:18 · 194 阅读 · 0 评论 -
环境变量注入需求引发的Spring注入问题
环境变量注入需求引发的Spring注入问题背景@AutoWired注入方式构造器注入其他get环境变量的方式背景需要注入环境变量,公司有一个封装好的工具类ApplicationEnvironment可以直接使用问题:注入的时候发现@Autowired失败。@AutoWired注入方式@Component// Spring生命周期中默认扫描的几个注解,@Component、@Service、@Controller等public class CommonConstants { /**原创 2021-06-30 15:12:09 · 337 阅读 · 0 评论 -
SpringBoot Developer Tools与热部署
@TOC参考:https://zhuanlan.zhihu.com/p/133233569https://blog.csdn.net/yaomingyang/article/details/78241988在Spring Boot项目中,Spring Boot官方提供了免费的Devtools热部署模块,通过maven的方式导入就能使用。根据官方描述,Spring Boot Devtools插件使用了两种类加载器来加载资源:对于第三方的jar包使用base classloader来加载,这类资源一般比原创 2021-06-21 21:53:51 · 281 阅读 · 0 评论 -
Spring事务@Transactional详解
Spring @Transactional详解https://www.jianshu.com/p/befc2d73e487原创 2021-06-08 12:19:03 · 244 阅读 · 0 评论 -
Spring集成log4j2
Spring集成log4j2参考文档配置文件解析Java配置参考文档log4j2官方文档:http://logging.apache.org/log4j/2.x/manual/appenders.html#JDBCAppenderLog4j2简明教程:内含各种环境变量的用法https://www.cnblogs.com/lzb1096101803/p/5796849.html配置文件解析关键配置文件:module1/conf/log4j2_module1.xml关键行:配置自定义日志输出格原创 2021-04-17 14:50:33 · 606 阅读 · 0 评论 -
SpringBoot 异步新建线程池并传递上下文
SpringBoot 异步新建线程池并传递上下文参考代码参考TaskDecorator介绍:https://www.jianshu.com/p/a30840acb882异步调用介绍以及异步线程之间上下文信息传递:https://blog.csdn.net/keets1992/article/details/98113619异步的介绍实际上还是@Async,参见文章:SpringBoot Controller异步请求@Async本篇的核心是,上下文信息的传递代码装饰器类import org原创 2021-04-17 14:33:11 · 1308 阅读 · 0 评论 -
ResponseBodyAdvice:对返回值二次封装
代码@Configurationpublic class ReturnConfig { @RestControllerAdvice( {"aaa.controller", "bbb.controller"}) static class ResponseAdvice implements ResponseBodyAdvice<Object> { private static final Object[] DEFAULT_PARAMETERS = {""};原创 2021-04-17 14:22:48 · 360 阅读 · 1 评论 -
Spring笔记收录
Spring笔记收录原理语法类单例模式的原理以及遇到问题的解决方案FactoryBean介绍BeanPostProcessor实例:自定义注解 + 配置文件注入 + IOC接口常用功能Spring入参校验较优雅写法Spring注解增强已有的方法实例AOP拦截器Spring SPEL使用之--在Java类中使用SPEL实现文件上传SpringBoot加载自定义配置文件的2种方法spring获取httprequest的4种方式监听器SpringBoot 注入请求公用参数(线程安全)ServletContextL原创 2021-04-17 11:45:23 · 148 阅读 · 0 评论 -
SpringSecurity系列文章学习笔记
SpringSecurity系列文章学习笔记学习链接第一篇:入门程序第二篇:自动登录第三篇:异常处理第四篇:自定义表单登录第五章:权限控制第六章:登录管理第七章:认证流程第八章:短信验证码登录学习链接https://blog.csdn.net/yuanlaijike/category_9283872.html第一篇:入门程序文章目录:一、导入依赖二、创建数据库三、准备页面四、配置application.properties配置了数据库驱动、URL、账户密码、开启mybatis的部分配置五原创 2021-04-13 21:05:37 · 858 阅读 · 0 评论 -
SpringSecurity学习笔记
SpringSecurity学习xuezxuez两个中文版的官方文档作为大纲:http://docs.jcohy.com/docs/spring-security/5.3.2.RELEASE/html5/zh-cn/#%E9%99%84%E5%BD%95(无图)https://www.docs4dev.com/docs/zh/spring-security/5.1.2.RELEASE/referenceSpring session官方文档:https://www.docs4dev.com/doc原创 2021-04-13 21:02:07 · 145 阅读 · 0 评论 -
Spring循环依赖
Spring循环依赖学习链接bean的生命周期循环依赖实例循环依赖与生命周期解决循环依赖的过程:三级缓存学习链接https://www.yuque.com/renyong-jmovm/kb/dpzl6ubean的生命周期循环依赖实例同样的B中有对A的依赖循环依赖与生命周期解决循环依赖的过程:三级缓存B先取原始对象放进去,完成自己的初始化就打破了循环依赖AOP存入单例池的对象不是new 出来的原始对象,而是经过代理的对象由上,加一个缓存是不能彻底解决循环依赖的所以说要有一个单原创 2021-04-12 20:29:44 · 118 阅读 · 0 评论 -
Spring学习笔记(持续记录)
Spring学习笔记学习链接:bean真正的创建行bean的懒加载bean的生命周期中的几种属性填充@Autowired先byType后byName的原因初始化过程中set部分属性学习链接:https://www.bilibili.com/video/BV1Vy4y1z79Ubean真正的创建行所有非懒加载的单例bean都会在12行创建12行创建bean的过程就是bean的生命周期:验证,在执行15行时发现走了如下代码:其中singletonObjects是一个存储了各种bean实例的单例池原创 2021-04-12 20:29:34 · 59 阅读 · 0 评论 -
Spring生命周期
Spring生命周期视频链接问题清单/引子bean定义Spring对象生命周期狭义生命周期回调的例子广义生命周期:几个关键内容BeanDefinitionBeanFactoryPostProcessorBeanFactory类的扫描过程属性填充:Autowired原理其余过程Spring集成mybatis理解整个bean的生命周期mybatis动态代理生成bean集成思路第一种集成方式第二种集成方式:factoryBean + 动态扫描加载视频链接https://www.bilibili.com/vid原创 2021-04-12 10:29:14 · 490 阅读 · 0 评论 -
Spring AOP与代理机制
Spring AOP与代理机制参考资料AOP动态代理机制核心三类角色委托类代理类#Cglib和jdk动态代理的区别?参考资料https://segmentfault.com/a/1190000037596406AOP动态代理机制AOP动态代理:JDK动态代理机制 + CGLIB代理JDK动态代理机制实例:Mybatis的动态代理,代理接口CGLIB代理:@ASPECT的动态代理,代理类核心三类角色代理模式中有三种核心的角色:委托类、代理类、接口,而gclib动态代理中“接口”是非必须的,因原创 2021-04-12 20:30:16 · 59 阅读 · 0 评论 -
Spring经典问题收录
Spring经典问题收录问题集合Spring题目合集对Spring的认识与理解Spring采取了以下4种关键策略:Spring的优缺点是什么?Spring IOC的理解简介Spring IoC 的实现机制控制反转(IoC)有什么作用/优势Spring 的 IoC 设计支持功能对AOP的理解简介实现原理多个bean同时满足注入条件,怎么选择;Spring事务传播行为详解Spring容器初始化常用的三种注入方式Spring的BeanPostProcessorSpring的@Configuration原理:Spr原创 2021-03-23 19:49:25 · 98 阅读 · 0 评论 -
SSO单点登录项目总结
SSO单点登录项目总结SSO定义方案简述SpringSecurityOAuth2JWT:用于生成Token流程图SSO模块代码SsoAuthorizationServerConfigSsoSecurityConfigMyExpiredSessionStrategyMyAuthenticationFailureHandlerMyAuthenticationProviderUserDetailsServiceGUI模块代码SecurityConfigSSO定义SSO(Single Sign-On)单点登录是原创 2021-02-21 17:31:31 · 707 阅读 · 0 评论 -
Spring项目使用Quartz创建定时任务
Spring项目使用Quartz创建定时任务Maven引入Spring组件注册Quartz任务注册与执行具体任务实现job接口Maven引入<dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.3.0</version></dependency>原创 2021-02-19 18:06:05 · 263 阅读 · 0 评论 -
bug未解之谜:Spring篇
遇到过的bug,某种方式解决掉了,但是原理未知。SpringBoot项目启动时报错:无法创建bean解决方式:原来的controller与service不在同一个包结构下面。将图中所示的controller与service放在同一个包下,该错误不复出现。...原创 2020-11-24 20:05:01 · 84 阅读 · 0 评论