
Spring
文章平均质量分 93
姠惢荇者
衣带渐宽终不悔 为伊消得人憔悴
展开
-
第一次使用ThreadPoolTaskExecutor实现线程池的经历,反复修改了多次代码才正常使用
在一个向第三方平台推送消息的场景中,为了提高程序的执行效率,每次发送消息,都创建一个新的线程来完成发送消息的任务,为了提供线程的使用性能,我选择了ThreadPoolTaskExecutor线程池,结果在使用的过程中,出现了较多的问题,这里记录一下避免以后再出现类似的错误(这些错误是不应该出现的,还是对ThreadPoolTaskExecutor使用不熟悉造成的)。原创 2023-06-13 15:40:51 · 3731 阅读 · 0 评论 -
基于SpringSecurity OAuth2实现单点登录——集成Github实现第三方账户登录
1、前言 在《SpringSecurity系列 之 集成第三方登录》中,我们基于SpringSecurity实现了集成的用户名密码、短信验证码和Github三种登录方式,其中,基于Github实现的登录,其实已经在SpringSecurity Oauth2中提供了一套实现流程,而且可以通过简单的配置就完成,我们下面尝试使用基于Oauth2的方式来实现Github的登录。2、Github账户配置 在使用Github实现登录的时候,首先需要在Github账户进行OAuth配置,和《SpringSecu原创 2021-09-25 00:44:29 · 2743 阅读 · 0 评论 -
SpringSecurity系列 之 AuthenticationEntryPoint接口及其实现类的用法
1、AuthenticationEntryPoint接口1.1、简介 被ExceptionTranslationFilter用来作为认证方案的入口,即当用户请求处理过程中遇见认证异常时,被异常处理器(ExceptionTranslationFilter)用来开启特定的认证流程。接口定义如下:public interface AuthenticationEntryPoint { void commence(HttpServletRequest request, HttpServletRespons原创 2021-09-24 11:05:02 · 24769 阅读 · 0 评论 -
SpringSecurity系列 之 集成第三方登录(包括默认的用户名密码、短信验证码和github三种登录方式)
一、前言 前面在《SpringSecurity系列 之 认证过程和原理》一文中,我们已经学习了SpringSecurity的认证过程,实现过程如下图所示: 根据这个认证过程,我们如何实现集成多种第三方登录的方案呢?我们这里提供了一种思路:首先我们提供一个实现了AbstractAuthenticationProcessingFilter抽象类的过滤器,用来代替UsernamePasswordAuthenticationFilter逻辑,然后提供一个AuthenticationProvider实现类代原创 2021-09-15 13:57:28 · 9402 阅读 · 5 评论 -
SpringBoot异常处理 之 404异常为什么不会被全局异常处理器处理呢(默认情况下)?
一、前言 在前面使用《自定义HandlerExceptionResolver类处理异常》和 《@ControllerAdvice+@ExceptionHandler注解实现异常处理》两篇内容中,我们如果没有经过特殊配置,会发现404异常,不会被被全局异常处理器进行处理,为什么呢?404异常和其他异常又有什么区别呢?带着这个疑问,我们开始今天的学习。二、如何让404异常在全局异常处理器中生效? 其实,让404异常可以被全局异常处理器捕获非常容易,只需要在application.properties配原创 2021-08-26 15:44:25 · 1985 阅读 · 1 评论 -
SpringBoot异常处理 之 自定义HandlerExceptionResolver类处理异常
一、前言 前面在《基于@ControllerAdvice注解实现全局异常处理用法和原理的探究》中,我们学习了使用@ControllerAdvice+@ExceptionHandler注解实现全局异常处理的方式,今天我们来学习另外一种全局异常处理的方式——自定义HandlerExceptionResolver类异常处理。二、用法 首先,我们这里使用了thymeleaf视图组件,引入依赖如下:<dependency> <groupId>org.springframework原创 2021-08-24 18:51:17 · 6070 阅读 · 0 评论 -
SpringBoot异常处理 之 如何使用最简单的方式覆盖默认错误页面?
一、用法简介 前面一篇内容中,我们学习了SpringBoot默认的异常处理机制,但是在实际的工作中,这种方式肯定是无法满足个性化的需求的,如何实现自定义错误页面呢?我们这里将会使用一种最简单的方式来实现,即通过在src/main/resources/templates 目录下创建 error.html 页面实现,具体用法如下:本篇内容旨在学习该用法背后的实现机制,所以我们先简单演示用法,重点在后面的分析。 首先,因为这里我们使用到了thymeleaf视图组件,所以需要引入该依赖,如下:<原创 2021-08-23 23:35:46 · 576 阅读 · 1 评论 -
SpringBoot默认的处理异常机制,默认错误页面是怎么产生的呢?
一、前言 在基于SpringBoot开发的过程中,经常遇见“Whitelabel Error Page”的错误页面,比如:404错误:500错误: 在实际开发中,不止上面的这两种情况,还有很多其他情况,这里不再一一列举,这些错误页面是如何产生的,是如果工作的呢?其实这就是SpringBoot提供的默认的异常处理机制。我们这一节就来学习SpringBoot默认的异常处理机制。二、主要接口或类 在SpringBoot实现的异常处理逻辑中,有几个常用的接口或类,我们这里先简单了解一下:E原创 2021-08-21 20:17:17 · 1013 阅读 · 0 评论 -
基于@ControllerAdvice注解实现全局异常处理用法和原理的探究
一、@ControllerAdvice注解1.1、简介 @ControllerAdvice注解主要用来实现一些全局性的功能,最常见的就是结合@ExceptionHandler注解实现全局异常的处理,这个也是我们这篇内容学习的重点。除了全局异常处理,还可以配合@InitBinder和@ModelAttribute两个注解使用,其中,@InitBinder注解主要用于请求中注册自定义参数的解析,从而达到自定义请求参数格式化的目的;@ModelAttribute注解主要用于表示被注解的方法会在执行目标Con原创 2021-08-03 15:59:26 · 2880 阅读 · 0 评论 -
SpringSecurity系列 之 认证过程和原理
1、前言 在《如何在SpringBoot项目中引入SpringSecurity进行权限控制》中,我们基于SpringBoot + SpringSecurity + Mybatis实现了登录认证相关功能。SpringSecurity 是如何实现登录认证的呢?我们这一节就通过跟踪代码执行的过程,来了解学习认证流程。2、SpringSecurity过滤器链 SpringSecurity是通过一系列的过滤器实现认证和授权的。其中,SpringSecurity 的过滤器并不是直接内嵌到Servlet Fil原创 2021-06-26 18:11:21 · 1339 阅读 · 0 评论 -
SpringSecurity系列 之 认证成功处理流程
1、常见用法 和SpringSecurity认证失败处理器方法类似,认证成功也提供了三种的配置方式,而且和认证失败的方式基本上是对应的。分别是:defaultSuccessUrl()方法,提供了两个重载方法,一个参数的方法只需要配置默认重定向路径,两个参数的方法除了配置重定向路径,还需要配置是否无论什么情况只重定向配置的路径。successForwardUrl()方法,服务端转发,无论什么情况只转发到配置的路径。successHandler()方法,自定义认证成功处理器。defaultSuc原创 2021-06-26 17:15:53 · 3335 阅读 · 0 评论 -
SpringSecurity系列 之 认证失败处理流程
1、常见用法 我们使用SpringSecurity进行配置的时候,有三种方式实现认证失败时的后续处理:其一,通过failureUrl()配置认证失败的重定向路径(Redirect);其二,我们还可以通过failureForwardUrl()配置认证失败的转发路径(Forward),和重定向效果类似,区别主要在于前者是重定向(默认),后者是转发;其三,自定义认证失败处理器,主要通过实现AuthenticationFailureHandler接口实现,其实前面两种方式也是通过实现该接口实现的。 fail原创 2021-06-25 18:13:59 · 8147 阅读 · 3 评论 -
如何在SpringBoot项目中引入SpringSecurity进行权限控制
1、前言 为了方便进行项目开发,自己搭建了一套简单的基于RBAC模型的权限管理系统,其中涉及到的用户、角色、资源(菜单)等模块已经实现了,现在需要引入SpringSecurity来实现认证和授权。2、引入依赖 这里使用的SpringSecurity的版本是:5.0.8.RELEASE,SpringBoot版本是:2.0.5.RELEASE。<dependency> <groupId>org.springframework.boot</groupId> &l原创 2021-03-25 18:14:31 · 1791 阅读 · 0 评论 -
Spring SmartLifecycle 在容器所有bean加载和初始化完毕执行
在使用Spring开发时,我们都知道,所有bean都交给Spring容器来统一管理,其中包括没一个bean的加载和初始化。 有时候我们需要在Spring加载和初始化所有bean后,接着执行一些任务或者启动需要的异步服务,这样我们可以使用 SmartLifecycle 来做到。 SmartLifecycle 是一个接口。当Spring容器加载所有bean并完成初始化之后,会接着回调实现该接口的类中对应的方法(start()方法)。 如下是一个实例(我在对应的方法上注上了明确的说明,注意看一下)转载 2020-12-14 10:42:21 · 1590 阅读 · 0 评论 -
Spring MVC学习笔记之Spring MVC组件ViewResolver
1、ViewResolver简介 ViewResolver,是视图解析器,它主要的作用是根据视图名和Locale解析出对应的视图。ViewResolver视图解析器的类图结构,如下所示: 通过上面类图,我们知道ViewResolver家族中,直接实现ViewResolver接口的类一共有四个,其中三个都只有一个实现类,而AbstractCachingViewResolver类则是有一个庞大的分支。我们下面,分别分析四类视图解析器的实现。ViewResolver接口 ViewResolver接原创 2020-09-21 23:12:29 · 549 阅读 · 0 评论 -
Spring MVC学习笔记之Spring MVC组件HandlerMethodReturnValueHandler
1、前言 在上一篇《Spring MVC组件HandlerMethodArgumentResolver》中,分析了关于Spring MVC中参数解析器HandlerMethodArgumentResolver系列的类,这一节我们分析学习处理器方法返回值的解析器HandlerMethodReturnValueHandler系列的类。和参数解析器相比,因为返回值的相对确定性(返回值个数),所以返回值解析器的逻辑相对比较简单。2、HandlerMethodReturnValueHandler类图 Ha原创 2020-09-21 21:34:17 · 346 阅读 · 0 评论 -
Spring MVC学习笔记之Spring MVC组件HandlerMethodArgumentResolver
1、HandlerMethodArgumentResolver接口 HandlerMethodArgumentResolver接口及其实现类主要是为了实现解析处理器中处理器request的方法中的参数。因为前面提到的HandlerMethod类型的处理器,参数可以是任意的形式,所以这就为定义参数解析器带来的很大的复杂度,在Spring MVC中提供了数量庞大的参数解析器,类图如下:因为HandlerMethodArgumentResolver家族非常庞大,所以查看类图时,需要放大或下载到本地再查看原创 2020-09-20 00:04:35 · 575 阅读 · 0 评论 -
Spring MVC学习笔记之Spring MVC组件HandlerMethod
1、前言 在前面的《Spring MVC组件HandlerAdapter》和《Spring MVC组件HandlerMapping(二)》博客中,我们知道HandlerMethod类是一个基于方法的处理器,包括了该处理器对应的方法和实例Bean,并提供了一些访问方法参数、方法返回值、方法注解等方法。这一节,我们将分析Spring框架中是如何设计并使用HandlerMethod的。2、类结构 HandlerMethod类图结构非常简单,一共就三个类,并且依次继承。其中,HandlerMethod类原创 2020-09-19 19:40:25 · 729 阅读 · 0 评论 -
Spring MVC学习笔记之Spring MVC组件HandlerAdapter
1、HandlerAdapter简介 HandlerAdapter是具体使用Handler来干活的,每个HandlerAdapter封装了一种Handler的具体使用方法。 通过上面的类图,我们可以发现HandlerAdapter接口一共只有六个子类,而且只有AbstractHandlerMethodAdapter和RequestMappingHandlerAdapter是两层,其实这两个类也是在实际工作中使用最多的,我们后面具体分析。其实,在Spring4.3之前,还有一个Annotation原创 2020-09-19 11:28:35 · 658 阅读 · 0 评论 -
Spring MVC学习笔记之Spring MVC组件HandlerMapping(二)
1、前言 在前面《Spring MVC组件HandlerMapping(一)》中,我们分析了HandlerMapping组件的整体逻辑及其AbstractUrlHandlerMapping系列的实现方式。这一节,我们将分析AbstractHandlerMethodMapping系列的实现方式。2、AbstractHandlerMethodMapping体系 在AbstractHandlerMethodMapping体系中,只有三个类,分别是AbstractHandlerMethodMapping、原创 2020-09-12 16:00:29 · 327 阅读 · 0 评论 -
Spring MVC学习笔记之Spring MVC组件HandlerMapping(一)
1、HandlerMapping简介 HandlerMapping组件是Spring MVC核心组件,用来根据请求的request查找对应的Handler。在Spring MVC中,有各式各样的Web请求,每个请求都需要一个对应的Handler来处理,具体接收到一个request请求,应该有那个Handler处理呢?这就是HandlerMapping组件的作用。 在Spring MVC框架中,HandlerMapping组件及其实现类的如下所示: 在HandlerMapping类的层级结构图中原创 2020-09-10 18:42:59 · 722 阅读 · 0 评论 -
Spring MVC学习笔记之Spring MVC的Servlet容器初始化和请求处理的设计和实现(二)
1、前言 在上一篇《Spring MVC的Servlet容器初始化和请求处理的设计和实现》博客中,我们了解了Servlet及容器Tomcat的相关知识,然后详细的分析了Spring MVC实现Servlet标准体系最基础的两个类HttpServletBean和FrameworkServlet,其中FrameworkServlet类中在处理请求过程中,还涉及到的localeContext、requestAttributes和ServletRequestHandledEvent消息发布的相关内容还没有详细分原创 2020-09-08 20:52:27 · 407 阅读 · 0 评论 -
Spring MVC学习笔记之Spring MVC的Servlet容器初始化和请求处理的设计和实现(一)
1、Servlet Servlet是J2EE标准的一部分,是Java Web开发的标准。Servlet制定了Java中处理Web请求的标准,但是标准本身只是提供了处理请求的标准规范,真正处理请求需要实现了Servlet标准的容器,我们常用的Servlet容器有Tomcat等,Servlet容器真正实现了对接收到的数据进行处理并生成要返回给客户端的结果。一般情况下,Servlet容器还包括了请求连接的建立和Socket通道内容的解析封装等功能。Servlet的结构图关于Servlet接口和Gener原创 2020-09-06 23:08:07 · 425 阅读 · 0 评论 -
Spring框架中注解@Import的用法和示例
1、@Import简介 该注解主要是为了实现把实例加入Spring IOC容器中,功能和通过Spring XML中配置<import/>效果是一样的。@Import可以导入的实例包括了@Configuration注解类、ImportSelector实现类或ImportBeanDefinitionRegistrar实现类,即提供了三种注入实例的方法。实际上,从Spring4.2以后,又增加了普通类的导入方式。 导入Spring IOC容器中的实例,和@Component等注解导入的实例用法原创 2020-09-06 10:53:46 · 771 阅读 · 0 评论 -
Spring框架中条件注解@Conditional的用法和示例
1、@Conditional用法示例 @Conditional注解是用来判断是否满足指定的条件来决定是否进行Bean的实例化及装配,下面通过示例演示@ConditionalOnMissingClass、@ConditionalOnMissingBean、@ConditionalOnClass和@ConditionalOnBean的用法。1、定义基础类,根据这些类或实例判断指定的类是否被加载@Componentpublic class BeanOne { public void run(){原创 2020-09-06 10:52:22 · 5632 阅读 · 0 评论 -
SpringBoot基于Redis实现简单的发布订阅功能
1、前言 正如标题所言,在SpringBoot项目中,基于Redis实现了简单的订阅和发布功能。项目实例地址:https://gitee.com/hsh2015/learningDemo/tree/master/redis-learning。下面主要记录一下,在实现该实例用到的知识点。2、依赖文件 <dependencies> <dependency> <groupId>org.springframework.boot</groupId原创 2020-07-03 12:38:12 · 3299 阅读 · 0 评论 -
Eureka客户端启动时,报错:java.net.UnknownHostException: eureka-server
遇见的问题: 在启动eureka服务的时候,正常,再启动网关组件的时候,出现如下错误:2020-04-15 11:04:07.514 WARN 26540 --- [ main] com.netflix.discovery.DiscoveryClient : Using default backup registry implementation which do...原创 2020-04-15 11:26:05 · 5606 阅读 · 1 评论 -
Redis学习笔记(10)- Spring Boot集成Redis
1、简介 这篇内容,主要简单实现了根据Spring的RedisTemplate类实现对Redis进行增删改查的简单Demo。2、构建Spring Boot项目 构建Spring Boot项目的方式有很多种:在 https://start.spring.io 网站构建Spring Boot项目通过idea+maven构建通过eclipse+maven构建 这里不再验证具体的步...原创 2020-02-29 22:39:47 · 263 阅读 · 0 评论 -
SpringBoot原理分析
一、SpringBootApplication注解学习 1、SpringBoot启动方法 在启动类的入口函数上,添加了@SpringBootApplication注解。@SpringBootApplicationpublic class Application { public static void main(String[] arg...原创 2019-08-21 14:02:35 · 2871 阅读 · 0 评论