
Spring
文章平均质量分 56
ywb201314
兵法有言,知己知彼,百战不殆
展开
-
cron表达式详解
"/"代表触发步进(step),"/"前面的值代表初始值("*"等同"0"),后面的值代表偏移量,比如"0/25"或者"*/25"代表从0分钟开始,每隔25分钟触发1次,即0分钟触发1次,第25分钟触发1次,第50分钟触发1次;"/"代表触发步进(step),"/"前面的值代表初始值("*"等同"0"),后面的值代表偏移量,比如"0/20"或者"*/20"代表从0秒钟开始,每隔20秒钟触发1次,即0秒触发1次,20秒触发1次,40秒触发1次;"5/20"代表5秒触发1次,25秒触发1次,45秒触发1次;转载 2024-05-09 17:45:14 · 73 阅读 · 0 评论 -
Gradle下载spring包出现Received status code 401 from server: Unauthorized
更多信息详见spring官方文档y:https://spring.io/blog/2020/10/29/notice-of-permissions-changes-to-repo-spring-io-fall-and-winter-2020。如果阿里云仓库里面没有,IDE还在报401的错误,也就是几乎没有办法下载到依赖的。如果是/libs-snapshot 或者 /libs-milestone,需要修改为/snapshot 或者 /milestone。//本地仓库,地址是maven本地仓库路径。转载 2024-02-29 09:54:48 · 1843 阅读 · 0 评论 -
Spring Boot注入Servlet、Filter、Listener 注解方式和使用RegistrationBean二种方式 加源码分析
2. urlPatterns = {"/css/*", "/images/*"} 当请求 /css/目录资源或者 /images/目录下资源的时候,会经过该过滤器。2. urlPatterns = {"/css/*", "/images/*"} 当请求 /css/目录资源或者 /images/目录下资源的时候,会经过该过滤器。//"/servlet01", "/servlet02" 就是注入的Servlet的url-pattern。//创建原生的filter。转载 2023-07-13 09:46:27 · 205 阅读 · 0 评论 -
一文搞懂SpringSecurity---[Day05]anyRequest,antMatcher,regexMatchers,mvcMatchers详解
在Spring Security的配置类中配置 .servletPath() 是 mvcMatchers()返回值特有的方法,antMatchers()和 regexMatchers()没有这个方法。无论是 antMatchers() 还是 regexMatchers() 都具有两个参数的方法,其中第一个参数都是HttpMethod,表 示请求方式,当设置了 HttpMethod 后表示只有设定的特定的请求方式才执行对应的权限设置。参数是不定向参数,每一个参数是一个ant表达式,用于匹配URL规则。转载 2023-04-11 14:20:49 · 811 阅读 · 0 评论 -
Spring Security Config : AbstractInterceptUrlConfigurer
创建目标FilterSecurityInterceptor用到的AccessDecisionManager可以由调用者设置,如果不设置,则使用该方法创建一个缺省的AccessDecisionManager,该缺省的AccessDecisionManager实现类使用AffirmativeBased,一票赞成即可通过。抽象方法,要求子类提供实现。抽象方法,要求子类提供实现。// 将新建的安全拦截过滤器 FilterSecurityInterceptor 添加到目标安全构建器 http 的Filter清单,转载 2023-04-06 17:22:32 · 153 阅读 · 0 评论 -
Spring Security Config : HttpSecurity安全配置器 ExpressionUrlAuthorizationConfigurer
这里每组RequestMatcher表示一组调用者想设定成相同权限控制的Http method/URL pattern,这里所设置的权限属性其实是基于SpEL的权限表达式。// 安全配置器指定一个安全表达式处理器 SecurityExpressionHandler,// 添加一组需要共同权限设置的 RequestMatcher,并对这组 RequestMatcher 设置相同的权限控制。转载 2023-04-06 17:23:26 · 1544 阅读 · 0 评论 -
PostProcessor(后置处理器)
前面介绍Spring。以及,还有一个。这些相当于工具,那谁来操作这些工具呢?幕后的操作者就是Spring中后置处理器(PostProcessor)。BeanFactoryPostProcessor(Bean 工厂后置处理器)和BeanPostProcessor(Bean 后置处理器)下面简述一下它们的作用别小看上面三个接口,Spring绝大部分重要技术都是这三个接口的子类来实现,它们也是扩展接口,可以自定义类来实现它们,以增强Spring功能或者是扩展Spring功能,又或是第三方框架。转载 2023-03-27 19:52:18 · 272 阅读 · 0 评论 -
Spring security源码解析系列04-AutowireBeanFactoryObjectPostProcessor分析
这里有一个参数的构造函数 ,属性类型 是 AutowireCapableBeanFactory. 这个 构造 方法就是在Spring 注入的时候调用。//InitializingBean 的afterPropertiesSet 调用, 自定义的方法的反射调用。// 这里调用 initializeBean 方法,主要是对 object 进行 属性完善,// 如果是 SmartInitializingSingleton类型,加入列表。//主要是进行Aware 的各种类型扩展,转载 2023-03-27 19:53:23 · 195 阅读 · 0 评论 -
Spring Security 源码分析九:Java config - 阶段性总结
本文是对 Spring Security Core 4.0.4 Release 进行源码分析的系列文章之一;本博文是有关 Spring Security 的配置相关的内容的阶段性总结;本文为作者的原创作品,转载需注明出处;笔者将千言万语汇集成了上面这张图;从左至右,DelegatingFilterProxy 是六大之一;它的目的就是将不同的访问请求转发到对应的 SecurityFilterChain 上;比如,将/web/**请求转发到上,将/foo/**转发到上;转载 2023-03-22 14:12:01 · 143 阅读 · 0 评论 -
WebSecurity源码分析
WebSecurity是spring-security整个体系里面最为重要的一个安全类,通过之前的文章分析,我们可以得知spring-security是通过一个名称为springSecurityFilterChain的过滤器对所有的请求进行过滤的,同时在WebSecurityConfiguration源码分析中我们可以得知这个过滤器是通过以下方式被WebSecurity构建出来的123456789101112= null&&!if (!});转载 2023-03-22 14:12:38 · 691 阅读 · 0 评论 -
【Spring-Security源码分析】WebSecurity
对用户请求的认证是使用的authenticationManager.authenticate(),关于这部分请参考https://blog.youkuaiyun.com/shenchaohao12321/article/details/87721655,认证成功后会使用accessDecisionManager.decide()方法完成用户访问的授权,下面分析授权流程。使用默认实现,这意味着此后将返回servletPath和pathInfo的原始值,而不是用于安全模式匹配的修改后的值。转载 2023-03-21 16:27:26 · 621 阅读 · 0 评论 -
Spring Security Config : AbstractConfiguredSecurityBuilder
在生命周期基础之上实现并final了基类定义的抽象方法#doBuild,将构建划分为三个主要阶段#init,#configure,#performBuild;对 #init/#configure阶段提供了前置回调#beforeInit/#beforeConfigure空方法供基类扩展;// 构建过程配置方法 : 调用所有 SecurityConfigurer 的 #configure 配置方法。// 构建过程初始化方法 : 调用所有 SecurityConfigurer 的 #init 初始化方法。转载 2023-03-21 16:21:29 · 304 阅读 · 0 评论 -
SpringSecurity------WebSecurityConfiguration配置类
简单的说,这个类的作用就是用来创建FilterChainProxy,FilterChainProxy是一个Servlet Filter,他是一组SecurityFilterChain的代理,用于管理这些SecurityFilterChain。这个方法是接口ImportAware的方法,当前配置类是通过@EnableWebSecurity注解上的@Import注解引入的,实现该接口的方法使得当前配置类可以获取到@EnableWebSecurity的debug属性值。转载 2023-03-15 15:35:50 · 1891 阅读 · 0 评论 -
SpringBoot--@Configuration(proxyBeanMethods = false) 的作用
如果配置类中的@Bean标识的方法之间不存在依赖调用的话,可以设置为false,可以避免拦截方法进行代理操作,提升性能。可以支持通过常规Java调用相同类的@Bean方法而保证是容器内的Bean,这有效规避了在“Lite模式”下操作时难以跟踪的细微错误。会走bean的生命周期中的一些行为(比如:@PostConstruct、@Destroy等 Spring中提供的生命周期)@Bean标识的返回值对象还是会放入到容器中的,从容器中获取bean还是可以是单例的,会走生命周期。如果为true,则是Full模式。转载 2023-03-13 10:45:48 · 352 阅读 · 0 评论 -
lombok 基础注解之 @Value
作用于类,使所有的成员变量都是 final 的,是以下注解的集合:@ToString、@EqualsAndHashCode、@Getter、@RequiredArgsConstructor。/** --------------- equals、hashCode、toString 省略 --------------- **/适合加在值不希望被改变的类上,像是某个类的值当创建后就不希望被更改,只希望读它而已 适合用在 POJO 或 DTO 上。所有的成员变量都是 final 的 不会这么做。转载 2023-01-31 15:40:22 · 904 阅读 · 0 评论 -
Spring的@Configurable
大家都知道,在Spring容器里的对象可以通过@Autowired来注入,但是如果这个对象是你自己new出来的,恐怕很难通过@Autowired来获得对象了。我们先看一下我们的一个普通对象,这个对象里我们注入一个Spring的ApplicationContext。@Configurable这个注解就是为了给非Spring容器管理的对象提供注入Spring容器内对象的一个注解。可以看到,Spring为我们添加了很多方法,这也就解释了为啥能注入spring bean的原因了。我们写测试类来看看结果,转载 2023-01-31 14:45:42 · 1614 阅读 · 0 评论 -
Spring事务aftercommit原理及实践
我们的aftercommit在triggerAfterCommit执行,这个方法里面抛出了异常,因为没有catch,异常会往上传递,在cleanupAfterCompletion里也没有处理异常,但是对于mybatis来讲,它改变了autocommit状态,所以更改被提交了。这是一个你想不到的坑。如果你要做数据库操作,你需要在一个新的事务中,可以使用。回顾我们上面展示的场景,我们在一个事务里,注册了一个aftercommit钩子,并且aftercommit里面,也会再次操作数据库,执行dml操作。转载 2022-11-17 21:51:24 · 1928 阅读 · 0 评论 -
lombok @Getter @Setter 使用注意事项
前言:半夜睡不着觉,把星星哼成歌,只好到csdn寻找另一个梦境。。。。。lombok是一个帮助简化代码的工具,通过注解的形式例如@Setter @Getter,可以替代代码中的getter和setter方法,虽然eclipse自带的setter、getter代码生成也不需要我们手动的去敲写,但是使用@Setter @Getter这样的注解,能够使我们的代码看上去更加的简洁、优雅。lombok...转载 2018-10-15 13:45:19 · 299 阅读 · 0 评论 -
Lombok框架-注解省略setter和getter代码
我们在开发过程中,通常都会定义大量的JavaBean,然后通过IDE去生成其属性的构造器、getter、setter、equals、hashcode、toString方法,当要对某个属性进行改变时,比如命名、类型等,都需要重新去生成上面提到的这些方法,那Java中有没有一种方式能够避免这种重复的劳动呢?答案是有,我们来看一下下面这张图,右面是一个简单的JavaBean,只定义了两个属性,在类上加上...转载 2018-10-17 10:14:58 · 341 阅读 · 0 评论 -
lombok系列2:lombok注解详解
开篇看到第一篇《初识lombok》你可能意犹未尽,本文我们按照场景来介绍一下常用的注解。未特别说明,均标注在类级别。lombok.Data最常用的注解,编译时自动添加Setter、Getter、toString()、equals()和hashCode()。package com.pollyduan;import java.util.Date;import lombok.Da...转载 2019-03-29 17:55:06 · 355 阅读 · 0 评论 -
lombok的安装与使用
最近去考了一个PMP,一直没更新。今天写个实用的工具吧,lombok。lombok是什么?我我理解,lombok就是使用注解来帮助你减少写那些重复性比较强的代码,提高开发效率的一款插件。比如替代get、set方法的@Getter @Setter。这样,当你写一个entity时,只要对该属性使用了这两个注解,他们就会再编译时,自动为你生成get、set方法。但有一个问题出现了,那么在写代码...转载 2019-03-29 17:53:18 · 154 阅读 · 0 评论 -
idea安装lombok插件后启动报错找不到符号
idea安装了lombok的插件,但是打开一个新的项目的时候如果里面使用了lombok插件每次启动都会报错,最近又有一个同事遇到,还是写下,应该也会有其他人遇到。很简单,在file——settings——build——compiler——Annotation Processors 找到下面框红的地方,打勾即可...转载 2020-06-19 13:47:07 · 1170 阅读 · 0 评论 -
@EnableGlobalMethodSecurity三方法详解
EnableGlobalMethodSecurity三方法详解要开启Spring方法级安全,在添加了注解的类上再添加注解即可其中注解[@Secured]在同一个应用程序中,可以启用多个类型的注解,但是只应该设置一个注解对于行为类的接口或者类。如:但是只应该设置一个注解对于行为类的接口或者类。转载 2022-10-09 16:51:23 · 2577 阅读 · 0 评论 -
@EnableGlobalMethodSecurity详解
该注解的机制是只要其声明的角色集合(value)中包含当前用户持有的任一角色就可以访问。也就是 用户的角色集合和 @Secured 注解的角色集合要存在非空的交集。从名字就可以看出@PreAuthorize 注解会在方法执行前进行验证,而 @PostAuthorize 注解会在方法执行后进行验证。在需要安全[角色/权限等]的方法上指定 @Secured,并且只有那些角色/权限的用户才可以调用该方法。@PostFilter: 和@PreFilter 不同的是, 基于返回值相关的表达式,对返回值进行过滤。转载 2022-10-09 16:49:28 · 1559 阅读 · 0 评论 -
Spring高级之注解@DependsOn详解(超详细)
需要用到观察者模式的情况下通常都需要用到该注解,观察者模式(详细可查看相关文章)有三要输,观察者、事件源、事件,机制是观察者会监听数据源的某些时间,当事件源触发该事件后,观察者就会知道进行相应措施。这类场景一般需要观察者要比事件源先创建,才能不遗漏事件源触发的每一个事件,要是事件源先创建,可能会在观察者创建前就触发了事件而观察者无法知道。比如老师是观察者,学生是事件源,学生迟到是事件,老师观察学生是否迟到,每当学生迟到,老师就会发现,并处罚该学生。//当作用在方法上时,通常会与@Bean注解配合使用。转载 2022-10-09 09:50:00 · 991 阅读 · 0 评论 -
Spring(32)——ImportSelector介绍
因为在它的selectImports()你可以实现各种获取bean Class的逻辑,通过其参数AnnotationMetadata importingClassMetadata可以获取到@Import标注的Class的各种信息,包括其Class名称,实现的接口名称、父类名称、添加的其它注解等信息,通过这些额外的信息可以辅助我们选择需要定义为Spring bean的Class名称。可能有的时候你不希望依赖于配置类上的@ComponentScan,而期望直接扫描配置类所在的包。转载 2022-10-08 16:50:57 · 400 阅读 · 0 评论 -
SpringBoot教程(2) @Import和ImportSelector的使用
通常我们要定义一个类实现ImportSelector ,它的selectImports方法返回的是String[],就是需要初始化的类的全类名数组。@Import修饰在类名上,给容器中自动创建出对应class类型的组件、默认组件的名字就是全 类 名 \color{red}{全类名}全类名。System.out.println("初始化了PiggMainConfig()");System.out.println("初始化了PiggMainConfig()");创建一个有@Configuration的类。转载 2022-10-08 16:48:36 · 527 阅读 · 0 评论 -
【方向盘】通俗易懂版讲解JWT和OAuth2,以及他俩的区别和联系(Token鉴权解决方案)(中)
【方向盘】通俗易懂版讲解JWT和OAuth2,以及他俩的区别和联系(Token鉴权解决方案)(中)转载 2022-09-27 15:09:12 · 794 阅读 · 1 评论 -
Spring Boot Security OAuth2 实现支持JWT令牌的授权服务器
在之后的请求中,客户端携带 JWT 请求需要访问的资源,如果资源的访问用到用户的相关信息,那么就直接从JWT中获取到。使用 OAuth2 是向认证服务器申请令牌,客户端拿这令牌访问资源服务服务器,资源服务器校验了令牌无误后,如果资源的访问用到用户的相关信息,那么资源服务器还需要根据令牌关联查询用户的信息。之前的两篇文章,讲述了Spring Security 结合 OAuth2 、JWT 的使用,这一节要求对 OAuth2、JWT 有了解,若不清楚,先移步到下面两篇提前了解下。携带JWT令牌请求资源。转载 2022-09-27 10:14:09 · 783 阅读 · 0 评论 -
HttpMessageConverter和HandlerMethodArgumentResolver作用
HttpMessageConverterHttp请求响应报文其实都是字符串,当请求报文到java程序会被封装为一个ServletInputStream流,开发人员再读取报文,响应报文则通过ServletOutputStream流,来输出响应报文。从流中只能读取到原始的字符串报文,同样输出流也是。那么在报文到达SpringMVC / SpringBoot和从SpringMVC / SpringBoot出去,都存在一个字符串到java对象的转化问题。这一过程,在SpringMVC / SpringBoo转载 2022-05-11 16:03:10 · 284 阅读 · 0 评论 -
Spring Boot 2.x实战41-SpringWebMVC13-WebMVC配置(控制器方法参数和返回值处理设置-AbstractMessageConverterMethodProcessor)
3.6.2 示例2我们再模仿@RequestBody和@ResponseBody的实现原理做一个简单的示例。请求体注解:@Target({ElementType.PARAMETER})@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface RequestPerson {}12345返回体注解:@Target({ElementType.METHOD})@Retention(RetentionPolicy.转载 2022-05-11 16:01:13 · 528 阅读 · 0 评论 -
@AutoConfigurationPackage自动包规则原理
@AutoConfigurationPackageAutoConfigurationPackage翻译过来就是自动配置包路径:@SpringBootApplication -> @EnableAutoConfiguration -> @AutoConfigurationPackage1AutoConfigurationPackage.javapackage org.springframework.boot.autoconfigure;import java.lang.ann.转载 2022-05-09 17:32:00 · 378 阅读 · 0 评论 -
ConditionalOnMissingBean无参的情况
之前碰到过很多次ConditionalOnMissingBean无参的情况,通过源码可知,当这个注解没有参数时,仅当他注解到方法,且方法上也有@Bean,才有意义,否则无意义。那意义在于已被注解方法的返回值类型的名字作为ConditionalOnMissingBean的type属性的值。OnBeanCondition.getMatchOutcome(ConditionContext context,AnnotatedTypeMetadata metadata) {......转载 2022-05-09 17:24:48 · 792 阅读 · 0 评论 -
Spring 整合 Spring Validation 自动验证
文章目录Spring Validation JSR-303 简介 JSR-303 基本的校验规则 空检查 布尔检查 长度检查 日期检查 正则检查 数值检查 使用 Spring Validation 验证 POM 定义验证工具类BeanValidator 修改实体类 注入工具类 调用BeanValidator工具类验证 Spring ValidationJSR-303 简介JSR-303是.转载 2022-05-05 16:50:01 · 1353 阅读 · 0 评论 -
JAVA中通过Hibernate-Validation进行参数验证
Hibernate-Validation?Hibernate-Validation是Hibernate框架中一套独立的后端校验框架,用于做参数的验证的;它是JSR303-Bean Validation规范的实现方案。JSR?JSR是Java Specification Requests的缩写,意思是Java 规范提案,用于指定java的标准。Bean Validation?Bean Validation是JSR中的303规范,用于提供Bean属性的相关校验规则。Hibernate Vali转载 2022-05-05 16:47:24 · 1503 阅读 · 0 评论 -
Java Validation Api实现原理解析
这篇文章主要介绍了Java Validation Api实现原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下前言: 涉及知识点:AOP、拦截器相关 功能主要实现类:因为bean validation只提供了接口并未实现,使用时需要加上一个provider的包,例如hibernate-validator 范围: 注解:@Valid @RequestBudy 主要实现类:RequestResponseBodyMethodP转载 2022-05-05 16:45:08 · 796 阅读 · 0 评论 -
Spring Validation方法实现原理分析
这篇文章主要介绍了Spring Validation实现原理分析,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧最近要做动态数据的提交处理,即需要分析提交数据字段定义信息后才能明确对应的具体字段类型,进而做数据类型转换和字段有效性校验,然后做业务处理后提交数据库,自己开发一套校验逻辑的话周期太长,因此分析了Spring Validation的实现原理,复用了其底层花样繁多的Validator,在此将分析Spring Validation原理的过程记录下,不深入细节如何转载 2022-05-05 16:44:06 · 913 阅读 · 0 评论 -
SpringBoot 中发布ApplicationEventPublisher,监听ApplicationEvent 异步操作
有这么一个业务场景:当用户注册后,发送邮件到其邮箱提示用户进行账号激活,且注册成功的同时需要赠送新人用户体验卡券。业务有了,那么问题也就来了。What? 问题…问题?我听说你有问题? 来拔刀吧,互相伤害啊。考虑以下两个问题:如何注册成功立即发送邮件、赠送体验卡? 如何同时向用户邮箱发送激活邮件、赠送新人客户体验卡,互不影响?如果是微服务项目,该逻辑可结合消息中间件进行处理。若是单机代码,有什么好的办法哇?你还在疯狂的代码逻辑判断吗?若代码高耦合,后期进行维护仿佛并不是那么happy,就不用说转载 2022-03-14 14:09:29 · 1133 阅读 · 0 评论 -
Spring注解——使用@ComponentScan自动扫描组件
1.创建一个配置类,在配置类上添加 @ComponentScan 注解。该注解默认会扫描该类所在的包下所有的配置类,相当于之前的 <context:component-scan>。package io.mieux.config;import org.springframework.context.annotation.ComponentScan;@ComponentScanpublic class BeanConfig {}2.使用 ApplicationConte转载 2022-01-25 14:52:55 · 1875 阅读 · 0 评论 -
ObjectPostProcessor在WebSecurityConfig中的应用
ObjectPostProcessor介绍笔者在学习Spring Security,调试HeaderWriterFilter源码时,遇到了一个比较困惑的问题,HeaderWriterFilter在往请求头写入信息时,通过shouldWriteHeadersEagerly这个变量来控制,在调用过滤器之前写入还是调用doFilter()之后将信息写入到请求头当中,默认是过滤链执行后写入。笔者以为可以在ResourceServerConfig#configure()方法中,调用HttpSecurity.hea转载 2022-01-13 17:57:04 · 595 阅读 · 0 评论