
springBoot
文章平均质量分 67
HD243608836
这个作者很懒,什么都没留下…
展开
-
Springboot Security 认证鉴权——使用JSON格式参数登录
在 中,默认的登陆方式是以表单形式进行提交参数的。可以参考前面的几篇文章,但是在前后端分离的项目,前后端都是以 JSON 形式交互的。一般不会使用表单形式提交参数。所以,在 中如果要使用 JSON 格式登录,需要自己来实现。那本文介绍两种方式使用 JSON 登录。1. 通过源码分析可以知道(打断点,往前捋),登录参数的提取在 过滤器中提取的,因此我们只需要模仿过滤器重写一个过滤器,替代原有的过滤器即可。 的源代码如下:重写其中的attemptAuthentication方法,默认表单认证,需要修改为兼原创 2023-05-09 17:41:12 · 3421 阅读 · 1 评论 -
Springboot JPA不用@Repository注解
在springboot+jpa的项目中,dao层只要实现JpaRepository接口就可以达成mybatis中注解@Repository+继承通过mapper的效果。网上找了好久,都没找到具体为什么jpa不用@Repository的原理,根据查到的资料推测应该要去解析spring本质才可以彻底理解,但实在没时间了,只能暂时这样了。继承了Repository接口的接口或者类,都相当于使用了@Repository注解,继承。根据接口的本质是类,注解的本质是一个接口。是注解的@Repository,转载 2023-04-24 12:55:58 · 377 阅读 · 0 评论 -
SpringSecurity——BCryptPasswordEncoder加密和对密码验证的原理
BCryptPasswordEncoder使用哈希算法+随机盐来对字符串加密。因为哈希是一种不可逆算法,所以密码认证时需要使用相同的算法+盐值来对待校验的明文进行加密,然后比较这两个密文来进行验证。BCryptPasswordEncoder在加密时通过从传入的salt中获取real_salt用来加密,保证了这一点。转载 2023-04-21 14:40:45 · 3642 阅读 · 0 评论 -
springboot idea自动生成单元测试用例最佳方案(自己手写插件)
对于我们开发人员来说,单元测试一定不会陌生,但在各种原因下会被忽视,尤其是在我接触到的项目中,提测阶段发现各种各样的问题,我觉得有必要聊一下单元测试。为了写而写的单元测试没什么价值,但一个好的单元测试带来的收益是非常客观的。问题是怎么去写好单元测试?怎么去驱动写好单元测试?一 我们的现状现状一:多个项目完全没有单元测试。现状二:开发人员没有写单元测试的习惯,或者由于赶业务记录而没有时间去写。现状三:单元测试写成了集成测试,比如容器、数据库,导致单元测试运行时间长,失去了意义。现状四:太依赖集成测试。转载 2023-04-14 22:10:05 · 11929 阅读 · 1 评论 -
Springboot 上传文件(头像)(MultipartFile、transferTo)
头像上传路径, 若不存在, 会根据该路径创建指定路径文件夹 创建类 FileUtils 并读取配置文件中的值 2. 设置上传文件的限制配置 3. 设置外部路径映射到url 创建config类 注意: 映射路径时, 最后面一定要加 / (File.separator) 注意: 此时映射了两个路径 外部环境的路径static目录下的路径(该路径用于存放一张默认图片随意一张, 作为默认头像 可命名为 default.png) 该字段默认值为 ‘static/default.png’ 即为用户的默原创 2023-04-06 20:58:49 · 1341 阅读 · 0 评论 -
微信小程序获取手机号47001 data format error hint的完美解答(restTemplate发送post请求)
的转换没问题,一开始看到data format error就以为是转换的问题。查看requestCallback的requestEntity即post的。我先使用【“一拖再拖”博主】其提供正确的代码,确定了我的entity实体类的。由于我之前使用的MultiValueMap,而不是普通的Map,会。可以看到,我其中的参数code的值是。(中括号[]表示),就会导致报这个错。另外,我们直接打断点进入源码,查看。request的body的属性都是。然后,才敢大步向前!类型,而不是普通的基本数据类型。原创 2023-04-03 15:17:17 · 5178 阅读 · 0 评论 -
maven的scope标签说明
服务器已经存在了,如果再打包会冲突),因为servlet-api在。3.provided依赖,在。2.compile范围是指。依赖范围是compile。1.test范围是指。4.runtime在。转载 2023-03-17 19:46:29 · 170 阅读 · 0 评论 -
关于Java:springboot如何验证方法参数@RequestParams是否为空?
(可以自定义错误message)转载 2023-03-07 16:58:00 · 3230 阅读 · 0 评论 -
BUG——@Autowired HttpServletResponse报错(Could not autowire. No beans of ‘HttpServletResponse’ type fo)
servlet是服务器创建的,所以不属于IOC管理,没法自动注入。sevlet至少也需要服务器启动时,才会创建,而在编写代码时,肯定是不存在滴。1)该注解不进行检查,服务器启动之后会实例化servlet,这样就不会报错了。spring团队倡导把reqeust、response与其他实例分开。HttpServletRequest自动装配功能,2)将其作为方法参数。转载 2023-02-28 19:10:20 · 809 阅读 · 1 评论 -
Springboot @Autowired依赖注入HttpServletRequest 和 HttpServletResponse 原理(居然不是单例)
通常来说依赖注入的对象一旦创建完成后就不会在改变,因为Spring的默认行为创建的都是单例对象。和不是单例对象,它们都是根据HTTP请求进行创建的,一个HTTP请求对象一个request和response。但是通过@Autowired可以实现每当一个请求进来时使用的都是当前的request或response对象,演示代码如下。转载 2023-02-28 18:43:40 · 6257 阅读 · 0 评论 -
后端SpringBoot怎么接收vue js前端传递过来的数组list传参
找了好久!,但是发现这样~原创 2022-11-29 17:35:55 · 2805 阅读 · 0 评论 -
@Scheduled(cron=““) spring定时任务时间设置
一个cron表达式有至少(也可能7个)有空格分隔的时间元素。按顺序依次为秒(0~59)分钟(0~59)小时(0~23)天(月)(0~31,但是你需要考虑你月的天数)月(0~11)天(星期)(1~7 1=SUN 或 SUN,MON,TUE,WED,THU,FRI,SAT)年份(1970-2099)其中每个元素可以是一个值(如6),一个连续区间(9-12),一个间隔时间(8-18/4)(/表示每隔4小时),一个列表(1,3,5),通配符。注意:由于""和""这两个元素互斥的,转载 2022-09-16 11:11:11 · 3301 阅读 · 1 评论 -
springboot上传文件落盘存储(MultipartFile转File)
——— 可以替换成FileUtils.forceMkdir(new File(patchPath))File dir = new File(patchPath);dir.exists()){ //如果不存在。要创建文件,必须先创建路径,路径不存在则会报错。,实例化一个File对象。,实例化File对象。原创 2022-08-22 14:41:50 · 855 阅读 · 0 评论 -
ConcurrentSkipListMap——跳表原理
为了引出 ConcurrentSkipListMap,先来简单理解下什么是跳表。对于单链表,即使链表是有序的,如果想要在其中查找某个数据,也只能从头到尾遍历链表,这样效率自然就会很低,跳表就不一样了。跳表是一种可以用来快速查找的数据结构,有点类似于平衡树。它们都可以对元素进行快速的查找。但一个重要的区别是:对平衡树的插入和删除往往很可能导致平衡树进行一次全局的调整;而对跳表的插入和删除,只需要对整个数据结构的局部进行操作即可。这样带来的好处是:在高并发的情况下,需要一个全局锁,来保证整个平衡树的线程安全;而转载 2022-06-30 15:17:13 · 470 阅读 · 0 评论 -
Spring Boot中内置Tomcat最大连接数、线程数与等待数 实践调优
在 Spring Boot 框架中,我们使用最多的是Tomcat,这是 Spring Boot 默认的容器技术,而且是内嵌式的 Tomcat。Tomcat 是 Apache 基金下的一个轻量级的Servlet 容 器 , 支 持 Servlet 和 JSP 。Tomcat服务器本身具有Web服务器的功能,可以作为独立的Web服务器来使用。Spring Boot 能支持的最大并发量主要看其对Tomcat的设置,可以在配置文件中对其进行更改。要了解具体参数的默认值,一个简单的方法是在application.pr转载 2022-06-24 21:55:52 · 29029 阅读 · 2 评论 -
在springboot中redis优雅批量匹配并删除(scan迭代查询,循环删除,非阻塞)
在搭建了项目之后,由于需要通过触发动作,并删除redis中多个key。 在查询了jedis并没有类似的删除方法之后,事情就变得清晰起来。完成上述任务,分为两个步骤: 从找到要删除的key来说,有两种方法,一种是通过jedis的keys方法来获得;另外一种是通过scan方法获得。 使用keys方法,寻找包含指定参数的key,其中“*”是匹配符,要是想找前缀就在其后加*,要是找后缀就在传入参数后面加*,而要是图省事方便,前后加*即可。12345678910 使用scan方法,寻找包含转载 2022-06-08 15:02:53 · 6052 阅读 · 1 评论 -
jpa应用中@EntityScan和@EnableJpaRepositories的用法
在Springboot应用开发中使用JPA时,· 通常在主应用程序所在包或者其子包的某个位置定义我们的Entity和Repository,这样基于Springboot的自动配置,无需额外配置,我们定义的Entity和Repository即可被发现和使用。· 但有时候我们需要定义Entity和Repository不在应用程序所在包及其子包,那么这时候就需要使用@EntityScan和@EnableJpaRepositories了。上面提到的Entity和Repository指的是通过类似下面的方式定义的E转载 2022-03-25 12:27:25 · 4584 阅读 · 0 评论 -
java的int类型中-128的二进制补码是怎么得来的?
什么是补码?怎么求补码?看看书,就会知道,补码,是有严格定义的。求补码方式一:按照定义来求补码,就用不着涉及原码反码(即使用公式 “[ X ]补 = 模-| X |” )。方式二:如果,你非要用求反加一的做法,就难免碰上原码反码。但是,int类型的八位码长的限制下,-128,既没有原码,也没有反码。这时,你还要用求反加一的做法,就一定会碰的头破血流。所以------------按照补码的定义,负数的补码,定义如下: [ X ]补 = 模-| X |按照定义,-128,如转载 2022-03-01 20:22:32 · 862 阅读 · 1 评论 -
手写一致性hash算法中的hash值为负数的问题解决
大家都知道,int型的值取值范围为Integer.MIN_VALUE(-2147483648)~Integer.MAX_VALUE(2147483647)hash结果取到负数时怎么修改呢?可以想到取绝对值,但是若恰好是Integer.MIN_VALUE取绝对值,就会导致时int正数发生了溢出!!Math.abs(Integer.MIN_VALUE) = Integer.MAX_VALUE+1(溢出)看来这样行不通,如果对hash做数据偏移,统一加2147483647呢?No no,转载 2022-02-28 21:06:26 · 2978 阅读 · 0 评论 -
tomcat服务器上部署JAR或执行java -jar之间的区别?
疑问 ?? ?运行java web有两种方式:(1) java -jar *.jar命令 ; (2)tomcat容器当使用springboot打包出jar包时,这个jar包可以直接 运行java -jar *.jar运行,另一种是把 *.jar移动到tomcat/webapps 中,二者的区别是什么?理解 ! ! !(一)对于springboot打包出来的jar包中已经包含了嵌入式tomcat服务器的依赖项,在pom.xml问价中,导入的maven依赖spring-boot-starter转载 2022-02-23 11:22:42 · 1791 阅读 · 0 评论 -
springboot注解@Configuration和@Component区别
@Configuration详解一、@Configuration@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documented@Componentpublic @interface Configuration { @AliasFor( annotation = Component.class ) String value() default "";}可以看到在@转载 2022-02-22 17:41:53 · 1303 阅读 · 0 评论 -
Springboot注解@EnableConfigurationProperties、@ConfigurationProperties、@ConfigurationPropertiesScan区别
前言在SpringBoot工程中,我们常常需要将一些特定前缀的配置项绑定到一个配置类上。这时候我们就可以使用@EnableConfigurationProperties、@ConfigurationProperties注解来实现。在SpringBoot2.2.0中还添加@ConfigurationPropertiesScan注解来帮助我们简化将配置类注册成一个Bean。下面主要讲解这三个注解的使用和源码实现。使用示例:将配置项绑定到配置类有如下配置项,我们分别采用@ConfigurationPr转载 2022-02-21 22:11:10 · 2347 阅读 · 0 评论 -
【SpringBoot学习】@EnableAutoConfiguration 和 @ComponentScan区别示例
代码地址:https://gitee.com/better-code/SpringBoot-Example/springboot01_1/代码结构:具体代码使用:com.example.springboot01_1.web.HelloController@RestControllerpublic class HelloController { @RequestMapping("/hello") public String hello() { .转载 2022-02-19 22:47:48 · 653 阅读 · 0 评论 -
springboot中@ComponentScan和@EnableAutoConfiguration的区别
一、前言研究springboot源码,在网上看相关博客的时候对@ComponentScan和@EnableAutoConfiguration两者之间的作用没有做过多的区分,导致我觉得他们两者都有扫描相关组建然后将符合要求的放入到ioc容器中。所以我就占牛角尖了,单独研究了一下他们的不同点。@ComponentScan和@EnableAutoConfiguration都是包含在@SpringBootApplication中的,也是@SpringBootApplication中比较重要的注解。二、相转载 2022-02-19 22:47:34 · 1683 阅读 · 3 评论 -
SpringMVC三大组件之——简单理解HandlerAdapter的作用
写在最前面 HandlerAdapter字面上的意思就是处理适配器,它的作用用一句话概括就是调用具体的方法对用户发来的请求来进行处理。当handlerMapping获取到执行请求的controller时,DispatcherServlte会根据controller对应的controller类型来调用相应的HandlerAdapter来进行处理。1.HandlerAdapter的注册DispatcherServlte会根据配置文件信息注册HandlerAdapter,如果在配置文件中...转载 2022-01-14 19:19:40 · 973 阅读 · 0 评论 -
什么是IOC容器——简单明了
1.IOC不是一种技术,只是一种思想英文原文:Inversion of Control中文翻译:控制反转一个重要的面向对象编程的法则,它能指导我们如何设计出松耦合,更优良的程序。传统应用程序都是由我们在类内部主动创建依赖对象,从而导致类与类之间高耦合,难于测试;有了IOC容器后,把创建和查找依赖对象的控制权交给了容器,由容器进行注入组合对象,所以对象与对象之间是松散耦合,这样也方便测试,利于功能复用,更重要的使程序的整个体系结构变得非常灵活。在运行期,在外部容器动态的将依赖对象注入组件,当外转载 2022-01-13 21:41:09 · 12766 阅读 · 1 评论 -
SpringBoot的AutoConfigure自动配置原理
外化配置和自动配置将配置从代码中分离到XML或者properties中,这种spring配置外部化的方式成为外部配置。spring 自动配置,spring-boot-autoconfigure依赖默认配置项,根据添加的依赖自动加载相关的配置属性并启动依赖。应用者只需要引入对应的start jar包,spring boot 就可以自动扫描和加载依赖信息。自动配置原理自动配置的前提 @Configuration :他是JavaConfig形式的Spring IOC容器配置,其本身是一个IOC转载 2022-01-04 04:12:48 · 4878 阅读 · 0 评论 -
springboot中注解@ConditionalOnProperty的使用规则(基于swagger切换不同环境开关演示)
用来指定配置文件是否生效,下面用一个具体例子讲解具体用法。例子:我们开发环境中希望使用swagger来生成api在线文档,但是在生产环境中则希望能够禁用swagger功能,这时@ConditionalOnProperty就排上用场了。在SwaggerConfig中配置ConditionalOnProperty,然后在配置文件application.properties中配置swagger.config.enabled即可灵活控制swagger的开启和关闭。具体代码如下:// 文件: Swagg转载 2022-01-04 02:04:47 · 970 阅读 · 0 评论 -
【惊人】Spring5 AOP 默认使用Cglib? 从现象到源码深度分析
Spring5 AOP 默认使用 Cglib 了?我第一次听到这个说法是在一个微信群里:真的假的?查阅文档刚看到这个说法的时候,我是保持怀疑态度的。大家都知道 Spring5 之前的版本 AOP 在默认情况下是使用 JDK 动态代理的,那是不是 Spring5 版本真的做了修改呢?于是我打开 Spring Framework 5.x 文档,再次确认了一下:文档地址:Core Technologies简单翻译一下。Spring AOP 默认使用 JDK 动态代理,如果对象没有实转载 2021-12-30 22:45:58 · 946 阅读 · 2 评论 -
JDK动态代理与Cglib动态代理(SpringBoot2.x使用spring aop示例)
我相信springaop中使用JDK动态代理与Cglib动态代理的区别这一问题在刚毕业的同窗面试时都被问过。咱们都会答:JDK动态代理的目标对象须要实现接口,Cglib动态代理的目标对象不须要实现接口。再牛逼一点的朋友可能会再答JDK动态代理经过反射来实现,Cglib动态代理经过对字节码的操做来实现的,动态代理能够用来作权限控制、事务、日志处理等做用。再问下去咱们就开始慌了由于咱们知道动态代理能够用来作这些功能,但刚出来咱们并无真正用过动态代理,这些框架都已经封装好了,咱们只要会增删查改就好.转载 2021-12-30 22:43:02 · 538 阅读 · 0 评论 -
Spring Boot Test单元测试——Junit4、Junit5区别与@ExtendWith不识别生效问题解析
一、SpringBoot2.4.x之后,改为默认集成JUnit5,替换了JUnit41. 根本原因新版本2.4之后的spring-boot-starter-test中去掉了兼容junit4引擎org.junit.vintage:junit-vintage-engine。2. SpringBoot2.4.0之后spring-boot-starter-test默认仅支持JUnit5@ExtendWith(SpringExtension.class)// 注意这里@SpringBoo.转载 2021-12-30 19:29:03 · 6767 阅读 · 0 评论 -
Spring 生命周期——对线面试官
面试官:今天要不来聊聊Spring对Bean的生命周期管理?候选者:嗯,没问题的。候选者:很早之前我就看过源码,但Spring源码的实现类都太长了候选者:我也记不得很清楚某些实现类的名字,要不我大概来说下流程?面试官:没事,你开始吧候选者:首先要知道的是候选者:普通Java对象和Spring所管理的Bean实例化的过程是有些区别的候选者:在普通Java环境下创建对象简要的步骤可以分为:候选者:1):java源码被编译为被编译为class文件候选者:2):等到类需要被初始化转载 2021-12-29 18:00:45 · 218 阅读 · 0 评论 -
Spring 是如何解决循环依赖的?
如何解决循环依赖问题?那Spring到底是如何解决的setter方法依赖注入引起的循环依赖问题呢?请看下图(其实主要是通过两个缓存来解决的):Spring三大缓存介绍Spring中有三个缓存,用于存储单例的Bean实例,这三个缓存是彼此互斥的,不会针对同一个Bean的实例同时存储。推荐:Java进阶视频资源如果调用getBean,则需要从三个缓存中依次获取指定的Bean实例。读取顺序依次是一级缓存-->二级缓存-->三级缓存一级缓存:Map<String,转载 2021-12-29 15:57:42 · 157 阅读 · 0 评论 -
java反射机制作用与具体使用方法
一、反射获取class对象Class<?> cls = Class.forName("cn.mldn.demo.Person"); // 取得Class对象传入一个包名+类名的字符串就可以得到Class对象二、反射后我们主要可以做什么获得对象,构造方法,普通方法,属性 Object obj = cls.newInstance() //反射实例化对象 Constructor<?> cons = cls.getConstructor(String.转载 2021-12-28 16:00:25 · 150 阅读 · 0 评论 -
springboot中com.fasterxml.jackson.annotation注解@JsonIgnoreProperties
一、jackson的mavern依赖 <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.5.3</version></dependency> 二、使用的背景 springboot项目中定义了很多.转载 2021-12-19 19:33:52 · 11737 阅读 · 0 评论 -
Spring JPA不用@Repository--笔记
网上找了好久,都没找到具体为什么jpa不用@Repository的原理,根据查到的资料推测应该要去解析spring本质源码才可以彻底理解,但实在没时间了,只能暂时这样了。~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Spring通过扩展预定义Repository接口之一来识别存储库(不是实现接口)。@NoRepositoryBean注释的目的是防止Spring将该特定接口本身视为存储库。Repository接口:仅仅是一个标识,表明任何继承它的均为仓库接转载 2021-12-19 16:11:28 · 708 阅读 · 0 评论 -
Spring 与 Mybatis 中的 @Repository 与 @Mapper与@Mapperscan
@Repository、@Service、@Controller,它们分别对应存储层Bean,业务层Bean,和展示层Bean。如果使用@Repository则需要使用@MapperScan("xxx.xxx.xxx.mapper")进行扫描,然后生成Dao层的Bean才能被注入到Service层中。@Mapper通过xml里面的namespace里面的接口地址,生成了Bean后注入到Service层中。相当于@Mapper=@Repository+@MapperScan使用注解的方式开发Dao转载 2021-12-19 13:23:18 · 1446 阅读 · 0 评论 -
MyBatis Spring 集成,mapper接口@Repository有时候却不用写的原因(MyBatis Spring 集成源码解析)
其实就是IOC容器的“xml方式与注解方式”的结合。mybatis jar包中,偷偷的把dao层类放入xml加载注入到IOC容器中了转载自,原文格式清晰:(181条消息) MyBatis Spring 集成,mapper接口@repository有时候却不用写的原因(MyBatis Spring 集成源码解析)_大灰狼的专栏-优快云博客_mybatisrepository接口~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~转载 2021-12-19 02:25:06 · 1091 阅读 · 0 评论 -
spring源码系列(三)——beanDefinition(1)【讲的很透】
转载自:spring源码系列(三)——beanDefinition(1)_java_lyvee的专栏-优快云博客_beandefinition转载 2021-12-15 19:22:33 · 180 阅读 · 0 评论 -
面试被问烂的 Spring IOC(求求你别再问了)
一、广义的 IOC(不止应用于Spring)IoC(Inversion of Control) 控制反转,即“不用打电话过来,我们会打给你”。两种实现:依赖查找(DL)和依赖注入(DI)。IOC 和 DI 、DL 的关系(这个 DL,Avalon 和 EJB 就是使用的这种方式实现的 IoC):DL 已经被抛弃,因为他需要用户自己去是使用 API 进行查找资源和组装对象。即有侵入性。 DI 是 Spring 使用的方式,容器负责组件的装配。注意:Java..转载 2021-12-06 18:36:04 · 224 阅读 · 0 评论