
Spring/Spring MVC
文章平均质量分 62
ywb201314
兵法有言,知己知彼,百战不殆
展开
-
一文搞懂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 评论 -
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 评论 -
Spring的@Configurable
大家都知道,在Spring容器里的对象可以通过@Autowired来注入,但是如果这个对象是你自己new出来的,恐怕很难通过@Autowired来获得对象了。我们先看一下我们的一个普通对象,这个对象里我们注入一个Spring的ApplicationContext。@Configurable这个注解就是为了给非Spring容器管理的对象提供注入Spring容器内对象的一个注解。可以看到,Spring为我们添加了很多方法,这也就解释了为啥能注入spring bean的原因了。我们写测试类来看看结果,转载 2023-01-31 14:45:42 · 1614 阅读 · 0 评论 -
解决Invalid character found in the request target. The valid characters are defined in RFC 7230 and RF
conf/catalina.properties中,找到最后注释掉的一行 #tomcat.util.http.parser.HttpParser.requestTargetAllow=| ,改成tomcat.util.http.parser.HttpParser.requestTargetAllow=|{},然后去掉这句话的注释。但若是在IE浏览器上进行访问,这个错误还是会出现,在IE上访问出现这个错误的原因:因为url的参数json中有双引号,火狐和谷歌浏览器会自动对url进行转码,但IE不会。转载 2022-12-14 13:28:14 · 8558 阅读 · 0 评论 -
Spring事务aftercommit原理及实践
我们的aftercommit在triggerAfterCommit执行,这个方法里面抛出了异常,因为没有catch,异常会往上传递,在cleanupAfterCompletion里也没有处理异常,但是对于mybatis来讲,它改变了autocommit状态,所以更改被提交了。这是一个你想不到的坑。如果你要做数据库操作,你需要在一个新的事务中,可以使用。回顾我们上面展示的场景,我们在一个事务里,注册了一个aftercommit钩子,并且aftercommit里面,也会再次操作数据库,执行dml操作。转载 2022-11-17 21:51:24 · 1928 阅读 · 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 评论 -
spring代理类中获取实现类的方法
今天写测试,需要对某个spring注入的类中set MOCK对象,需要获得代理的对象。public static Object getTargetObject(Object proxy) throws Exception { if(!AopUtils.isAopProxy(proxy)) { //判断是否是代理类 return proxy; } return getTargetObject(getPr...转载 2021-06-10 13:57:15 · 487 阅读 · 0 评论 -
Gradle Tomcat Web项目报错及处理
1.lombok报错1.不用lombok,自动生成get/set方法2.在可正常用maven环境下lombok的情况下把gradle中的build/run改成IDEA2.Kotlin: warnings found and -Werror specified由于我是在Spring源码中写的测试项目,所以依赖的其他项目貌似用了Kotlin来build,又因为我本地的jdk是删除了servlet-jar的(为了不和项目中的同名包冲突一般都会在项目中用服务器的servlet-api.jar),所以会报转载 2021-05-10 14:13:42 · 284 阅读 · 1 评论 -
Spring源码下载编译阅读
1.前言:经过多次拉取Spring源码编译失败经历,一下抓取配置编译过程各个软件版本可能有影响因此先做以记录(时间不同也会导致版本出入要注意)Idea:2020.1.1(参考文献博主2019.3.3版本也可)插件:maven(3.6.3)(未用到)Gradle (4.10.3) Kotlin(idea内装)JDK:原机安装1.8版本 需要11版本(后续会说明JDK1.8问题)注:流程可能较长,源码拉取编译不易,耐心阅读2.流程2.1抓取Spring源码GITHUB网址:https://gi转载 2021-05-06 16:27:47 · 477 阅读 · 0 评论 -
@JsonProperty和@JsonAlias的区别
@JsonProperty这个注解提供了序列化和反序列化过程中该java属性所对应的名称@JsonAlias这个注解只只在反序列化时起作用,指定该java属性可以接受的更多名称代码展示下不同注解的效果: public static void main (String[] args ) throws IOException { String a ="{\"NaMe\":\"hello\"}"; ObjectMapper objectMapper = ne转载 2020-08-07 16:48:46 · 274 阅读 · 0 评论 -
java数据脱敏处理,手机号,身份证号和银行卡号打码展示
java数据脱敏处理,手机号,身份证号和银行卡号打码展示结果图如下20:17:51.730 [main] INFO com.lockbur.open.AppTest - 手机号 136****472420:17:51.740 [main] INFO com.lockbur.open.AppTest - 手机号 13****20:17:51.741 [main] INFO com.lockbur.open.AppTest - 邮箱 845****22@qq.com20:17:51.741转载 2020-08-03 14:03:51 · 2222 阅读 · 0 评论 -
SpringBoot启动时初始化数据库及spring.jpa.generate-dll与spring.jpa.hibernate.ddl-auto之间的困惑
参考文章Springboot2.x 自动创建表并且执行初始化数据---------------------------------1、SpringBoot根据脚本初始化结构初始化脚本文件由spring.datasource.schema属性指定,数据初始化脚本由文件spring.datasource.data属性指定。这两个脚本是否执行的开关由spring.datasource.initialization-mode决定:always-一定执行,embedded-只对内存数据库执行,n.转载 2020-07-21 15:42:16 · 1681 阅读 · 0 评论 -
Spring在代码中获取bean的几种方式
方法一:在初始化时保存ApplicationContext对象方法二:通过Spring提供的utils类获取ApplicationContext对象方法三:继承自抽象类ApplicationObjectSupport方法四:继承自抽象类WebApplicationObjectSupport方法五:实现接口ApplicationContextAware方法六:通过Spring提供的ContextLoader获取spring中bean的方式总结:方法一:在初始化时保存Applica...转载 2020-07-16 19:56:14 · 168 阅读 · 0 评论 -
使用spring ResponseEntity处理http响应
使用spring ResponseEntity处理http响应简介使用spring时,达到同一目的通常有很多方法,对处理http响应也是一样。本文我们学习如何通过ResponseEntity设置http相应内容、状态以及头信息。ResponseEntityResponseEntity标识整个http相应:状态码、头部信息以及相应体内容。因此我们可以使用其对http响应实现完整配置。如...转载 2020-03-25 17:50:52 · 451 阅读 · 0 评论 -
ResponseEntity返回数据、状态、头部信息
ResponseEntity :标识整个http相应:状态码、头部信息、响应体内容(spring)@ResponseBody:加在请求处理方法上,能够处理方法结果值作为http响应体(springmvc)@ResponseStatus:加在方法上、返回自定义http状态码(spring)ResponseEntity事例:import com.baidu.item.pojo...转载 2020-03-25 17:49:43 · 5251 阅读 · 0 评论 -
@ControllerAdvice实现优雅地处理异常
@ControllerAdvice,是Spring3.2提供的新注解,它是一个Controller增强器,可对controller中被 @RequestMapping注解的方法加一些逻辑处理。最常用的就是异常处理统一异常处理需要配合@ExceptionHandler使用。当将异常抛到controller时,可以对异常进行统一处理,规定返回的json格式或是跳转到一个错误页面//全局异常...转载 2020-03-25 16:55:25 · 266 阅读 · 0 评论 -
SpringMVC 中 @ControllerAdvice 注解的三种使用场景!
@ControllerAdvice ,很多初学者可能都没有听说过这个注解,实际上,这是一个非常有用的注解,顾名思义,这是一个增强的 Controller。使用这个 Controller ,可以实现三个方面的功能:全局异常处理 全局数据绑定 全局数据预处理灵活使用这三个功能,可以帮助我们简化很多工作,需要注意的是,这是 SpringMVC 提供的功能,在 Spring Boot 中可以直接...转载 2020-03-25 16:53:25 · 168 阅读 · 0 评论 -
springboot启动时执行任务CommandLineRunner
# SpringBoot中CommandLineRunner的作用> 平常开发中有可能需要实现在项目启动后执行的功能,SpringBoot提供的一种简单的实现方案就是添加一个model并实现CommandLineRunner接口,实现功能的代码放在实现的run方法中# 简单例子``` javapackage org.springboot.sample.runner;import o...转载 2019-12-19 16:00:02 · 143 阅读 · 0 评论 -
小家java】Spring事务嵌套引发的血案---Transaction rolled back because it has been marked as rollback-only
相关阅读【小家java】java8新特性(简述十大新特性) 饱受赞誉【小家java】java11新特性(简述八大新特性) 首个重磅LTS版本【小家Spring】Spring IOC容器启动流程 AbstractApplicationContext#refresh()方法源码分析(一)【小家Spring】Spring IOC容器启动流程 AbstractApplicationContext...转载 2019-11-14 14:42:39 · 2129 阅读 · 0 评论 -
使用 ConstraintValidator 接口及BindingResult实现注解定义参数范围
1. 简介在java开发中,经常见到许多通过注解@Annotation实现功能的优秀代码,尤其在接触spring之后,对注解更是一发不可收拾,这里将向读者介绍一种范围定界方法。需要说明的是,这种定界方法不能独立于世,而必须结合Validation-api-*.jar公共包一起使用。这里以定界一个变量privateString agentId;取值范围(1,3)为例来说明。...转载 2019-10-15 17:21:25 · 382 阅读 · 0 评论 -
通过实现ConstraintValidator完成自定义校验注解
首先贴上代码/*** @author hsw* @Date 11:28 2018/7/26*/@Datapublic class LoginVO { @NotNull @IsMobile private String mobile; @NotNull @Length(min = 32) private String passw...转载 2019-10-15 17:00:30 · 439 阅读 · 0 评论 -
Log4j输出格式控制--log4j的PatternLayout参数含义
做项目被log4j的输出格式化参数搞烦了,索性把API的相关部分大致翻译一下,原文参见http://logging.apache.org/log4j/docs/api/org/apache/log4j/PatternLayout.html 参数说明例子%c列出logger名字空间的全称,如果加上{}表示列出从最内层算起的指定层数的名字空间log4转载 2016-03-18 14:06:44 · 612 阅读 · 0 评论