![](https://img-blog.csdnimg.cn/168a59bbb0c54f6c9ce72728fbbc3820.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
spring杂文
文章平均质量分 91
spring杂文,我还有一个spring系统化学习的专栏,陆续免费发布中,欢迎关注!
字母哥哥
百人团队技术经理。2017年度吉林省软件行业协会“最卓越程序员奖”获得者。曾就职于微软,微软MVP。华为云享专家。
展开
-
web项目访问引用jar内部的静态资源
web项目访问引用jar内部的静态资源,在Servlet3协议规范中,包含在JAR文件`/META-INFO/resources/`路径下的资源可以直接访问。原创 2022-08-09 10:53:01 · 920 阅读 · 0 评论 -
[开源项目]可观测、易使用的SpringBoot线程池
在开发spring boot应用服务的时候,难免会使用到异步任务及线程池。spring boot的线程池是可以自定义的,所以我们经常会在项目里面看到类似于下面这样的代码),方便集成到Spring Boot项目里面去。。需要说明的是:zimug-monitor-threadpool并未改变SpringBoot线程池的实现,只是在其基础上添加了初始化阶段的配置自动化加载,运行时的状态监控。所以任何有关Spring Boot线程池运行时性能的讨论,都与本文及其实现无关。...原创 2022-08-08 12:37:35 · 1050 阅读 · 5 评论 -
spring boot打印sql语句-mybatis
spring boot打印sql语句-mybatisspring boot打印sql语句-mybatisspring boot打印sql语句-mybatis转载自:我的有趣住在无趣里概述当自己编写的程序出现了BUG等等,找了很久调试运行了几遍到mapper层也进去调试进了源码,非常麻烦我就想打印出sql语句,好进行解决BUG方法:可以在你的application...转载 2019-10-16 07:41:31 · 491 阅读 · 0 评论 -
本月16日SpringBoot2.2发布,有哪些变化先知晓
本月(2019年10月16日)Spring Boot 2.2已经正式发布了!在此篇文章中,将给大家介绍一下2.2版为大家带来了哪些重要的新变化。笔者用心书写,希望阅读完成之后转发关注,你的支持是我不竭的创作动力!一、Spring bean全局延迟初始化配置Spring Boot 2.2引入的一项新功能是全局延迟bean初始化的支持(默认情况下,此功能处于禁用状态)。那么如果启用全局延迟bea...原创 2019-10-26 07:24:40 · 511 阅读 · 0 评论 -
SpringBoot生命周期管理之停掉应用服务几种方法
前言在生产环境下管理Spring Boot应用的生命周期非常重要。Spring容器通过ApplicationContext处理应用服务的所有的beans的创建、初始化、销毁。本文着重于生命周期中的销毁阶段的处理,我将使用多种方式来实现关闭Spring Boot应用服务。如果你需要了解关于Spring Boot更多内容,请看我之前写过的文章和精品合辑!一、通过Actuator Shutdown...原创 2019-10-28 08:10:02 · 1573 阅读 · 0 评论 -
使用JRebel插件实现SpringBoot应用代码热加载
前言在实际的开发过程中,我们经常修改代码之后,手动的重启项目,查看修改效果。那么有没有一种方式能够快速的、自动的帮我们将修改代码自动更新,避免手动重启,从而提高开发效率呢?是有的,在我之前的文章里面给读者介绍了使用springboot-devtools实现热加载的方法。本文就给大家介绍另外一种方式:使用Jrebel插件完成修改代码及资源的自动更新功能。但是对于这个功能很多人对功能的叫法有争...原创 2019-10-30 08:13:53 · 1319 阅读 · 0 评论 -
如何在Spring Boot中使用Cookies
一、 导读本文大纲读取HTTP Cookie设置HTTP Cookie读取所有Cookie[]为Cookie设置过期时间Https与CookieHttpOnly Cookie删除CookieHTTP Cookie(也称为Web cookie,浏览器cookie)是服务器在用户浏览器中存储的小部分数据。服务器端应用程序在返回浏览器请求响应的时候设置cookie,浏览器存储...原创 2019-11-03 09:39:52 · 2301 阅读 · 0 评论 -
持久层框架JPA与Mybatis该如何选型
一、现状描述目前java 持久层ORM框架应用最广泛的就是JPA和Mybatis。JPA只是一个ORM框架的规范, 对该规范的实现比较完整就是Spring Data JPA(底层基于Hibernate实现),是基于Spring的数据持久层框架,也就是说它只能用在Spring环境内。Mybatis也是一个优秀的数据持久层框架,能比较好的支持ORM实体关系映射、动态SQL等。笔者在学习这两个框架的...原创 2019-11-04 08:40:54 · 2725 阅读 · 1 评论 -
在SpringBoot中使用flyway进行数据库版本管理
本文大纲flyway是什么能帮助我们解决什么问题springboot环境下使用flywayflyway的工作原理一、flyway是什么Flyway是一个开源的数据库版本管理工具,并且极力主张“约定大于配置”,简单、专注、强大。可以使用SQL完成数据同步,或者基于特定数据库的语法(例如PL / SQL,T-SQL等)或Java代码(适用于高级数据转换或处理LOB)的方式编写。...原创 2019-11-05 08:47:40 · 2159 阅读 · 0 评论 -
使用Spring Data JPA进行数据分页与排序
一、导读如果一次性加载成千上万的列表数据,在网页上显示将十分的耗时,用户体验不好。所以处理较大数据查询结果展现的时候,分页查询是必不可少的。分页查询必然伴随着一定的排序规则,否则分页数据的状态很难控制,导致用户可能在不同的页看到同一条数据。那么,本文的主要内容就是给大家介绍一下,如何使用Spring Data JPA进行分页与排序。二、实体定义我们使用一个简单的实体定义:Article(...原创 2019-11-07 08:00:35 · 1961 阅读 · 0 评论 -
详解SpringBoot应用跨域访问解决方案
一、什么是跨域访问说到跨域访问,必须先解释一个名词:同源策略。所谓同源策略就是在浏览器端出于安全考量,向服务端发起请求必须满足:协议相同、Host(ip)相同、端口相同的条件,否则访问将被禁止,该访问也就被称为跨域访问。虽然跨域访问被禁止之后,可以在一定程度上提高了应用的安全性,但也为开发带来了一定的麻烦。比如:我们开发一个前后端分离的易用,页面及js部署在一个主机的nginx服务中,后端接口...原创 2019-11-11 08:23:32 · 1816 阅读 · 0 评论 -
详解Spring Security的formLogin登录认证模式
一、formLogin的应用场景在本专栏之前的文章中,已经给大家介绍过Spring Security的HttpBasic模式,该模式比较简单,只是进行了通过携带Http的Header进行简单的登录验证,而且没有定制的登录页面,所以使用场景比较窄。对于一个完整的应用系统,与登录验证相关的页面都是高度定制化的,非常美观而且提供多种登录方式。这就需要Spring Security支持我们自己定制登录...原创 2019-11-16 10:30:05 · 6954 阅读 · 1 评论 -
结合参数接收响应转换原理讲解SpringBoot常用注解
一、常用注解回顾1.1 @RequestBody与@ResponseBody//注意并不要求@RequestBody与@ResponseBody成对使用。public @ResponseBody AjaxResponse saveArticle(@RequestBody ArticleVO article)如上代码所示:@RequestBody修饰请求参数,注解用于接收HTTP...原创 2019-11-19 08:10:26 · 1716 阅读 · 0 评论 -
使用Spring安全表达式控制系统功能访问权限
一、SPEL表达式权限控制从spring security 3.0开始已经可以使用spring Expression表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。Spring Security可用表达式对象的基类是SecurityExpressionRoot。表达式函数描述hasRole([role])用户拥有指定的角色时返回true (Spring sec...原创 2019-11-21 08:03:59 · 1698 阅读 · 0 评论 -
结合Spring Security进行web应用会话安全管理
在本文中,将为大家说明如何结合Spring Security 和Spring Session管理web应用的会话。一、Spring Security创建使用session的方法Spring Security提供4种方式精确的控制会话的创建:always:如果当前请求没有session存在,Spring Security创建一个session。ifRequired(默认): Spring...原创 2019-11-22 07:40:12 · 1678 阅读 · 0 评论 -
SpringSecurity退出功能实现的正确方式
本文将介绍在Spring Security框架下如何实现用户的"退出"logout的功能。其实这是一个非常简单的功能,我见过很多的程序员在使用了Spring Security之后,仍然去自己写controller方法实现logout功能,这种做法就好像耕地,你有机械设备你不用,你非要用牛。一、logout最简及最佳实践其实使用Spring Security进行logout非常简单,只需要在s...原创 2019-11-25 07:50:00 · 2601 阅读 · 2 评论 -
将Swagger2文档导出为HTML或markdown等格式离线阅读
网上有很多《使用swagger2构建API文档》的文章,该文档是一个在线文档,需要使用HTTP访问。但是在我们日常使用swagger接口文档的时候,有的时候需要接口文档离线访问,如将文档导出为html、markdown格式。又或者我们不希望应用系统与swagger接口文档使用同一个服务,而是导出HTML之后单独部署,这样做保证了对接口文档的访问不影响业务系统,也一定程度提高了接口文档的安全性。核...原创 2019-11-26 07:58:15 · 4324 阅读 · 0 评论 -
结合RBAC模型讲解权限管理系统需求及表结构创建
在本号之前的文章中,已经为大家介绍了很多关于Spring Security的使用方法,也介绍了RBAC的基于角色权限控制模型。但是很多朋友虽然已经理解了RBAC控制模型,但是仍有很多的问题阻碍他们进一步开发。比如:RBAC模型的表结构该如何创建?具体到某个页面,某个按钮权限是如何控制的?为了配合登录验证表,用户表中应该包含哪些核心字段?这些字段与登录验证或权限分配的需求有什么关系?...原创 2019-11-26 13:30:32 · 2284 阅读 · 0 评论 -
SpringSecurity动态加载用户角色权限实现登录及鉴权
很多人觉得Spring Security实现登录验证很难,我最开始学习的时候也这样觉得。因为我好久都没看懂我该怎么样将自己写的用于接收用户名密码的Controller与Spring Security结合使用,这是一个先入为主的误区。后来我搞懂了:根本不用你自己去写Controller。你只需要告诉Spring Security用户信息、角色信息、权限信息、登录页是什么?登陆成功页是什么?或者其他...原创 2019-11-27 07:39:55 · 4143 阅读 · 0 评论 -
Spring Security之多次登录失败后账户锁定功能的实现
在上一次写的文章中,为大家说到了如何动态的从数据库加载用户、角色、权限信息,从而实现登录验证及授权。在实际的开发过程中,我们通常会有这样的一个需求:当用户多次登录失败的时候,我们应该将账户锁定,等待一定的时间之后才能再次进行登录操作。一、基础知识回顾要实现多次登录失败账户锁定的功能,我们需要先回顾一下基础知识:Spring Security 不需要我们自己实现登录验证逻辑,而是将用户、角...原创 2019-11-28 07:44:56 · 5321 阅读 · 4 评论 -
图文详解应用登录验证码的多种实现方案
在本号的一系列Spring Security文章中,先后介绍了各种登录验证及授权中的知识点,如:spring-security简介并与shiro对比、 formLogin模式登录认证、动态数据登录验证与权限分配、账户多次登录失败锁定、RememberMe记住我功能,等等文章。笔者觉得以上的这些实际上都很简单,我们没有涉及到分布式应用。本节将以分布式的应用背景,讲解验证码实现的多种方式。本小节先从...原创 2019-11-29 07:51:32 · 1921 阅读 · 0 评论 -
结合开源软件kaptcha讲解登录验证码功能的实现
一、验证码生成之配置使用kaptcha使用google开源的验证码实现类库kaptcha,通过maven坐标引入<dependency> <groupId>com.github.penggle</groupId> <artifactId>kaptcha</artifactId> <version>2.3...原创 2019-11-29 13:37:31 · 1781 阅读 · 0 评论 -
在Spring Security框架下JWT的实现细节原理
一、回顾JWT的授权及鉴权流程在笔者的上一篇文章中,已经为大家介绍了JWT以及其结构及使用方法。其授权与鉴权流程浓缩为以下两句话授权:使用可信用户信息(用户名密码、短信登录)换取带有签名的JWT令牌鉴权:解签JWT令牌,校验用户权限。具有某个接口访问权限,开放该接口访问。二、Spring Security授权细节说明我相信大家都能理解上面的授权与鉴权的整体流程,但是具体到使用...原创 2019-12-02 13:30:46 · 4179 阅读 · 1 评论 -
SpringSecurity代码实现JWT接口权限授予与校验
通过笔者前两篇文章的说明,相信大家已经知道JWT是什么,怎么用,该如何结合Spring Security使用。那么本节就用代码来具体的实现一下JWT登录认证及鉴权的流程。一、环境准备工作建立Spring Boot项目并集成了Spring Security,项目可以正常启动通过controller写一个HTTP的GET方法服务接口,比如:“/hello”实现最基本的动态数据验证及权限分配...原创 2019-12-03 07:54:31 · 2024 阅读 · 0 评论 -
白话OAuth2用户认证及鉴权标准流程
一、OAuth2需求场景在说明OAuth2需求及使用场景之前,需要先介绍一下OAuth2授权流程中的各种角色:资源拥有者(User) - 指应用的用户认证服务器 (Authorization Server) - 提供登录认证接口的服务器,比如:github等资源服务器 (Resources Server) - 提供资源接口及服务的服务器,通常和认证服务器是同一个应用。第三方客户端(C...原创 2019-12-09 13:32:58 · 2054 阅读 · 0 评论 -
使用Spring Data JPA的Specification构建数据库查询
Spring Data JPA最为优秀的特性就是可以通过自定义方法名称生成查询来轻松创建查询SQL。Spring Data JPA提供了一个Repository编程模型,最简单的方式就是通过扩展JpaRepository,我们获得了一堆通用的CRUD方法,例如save,findAll,delete等。并且使用这些关键字可以构建很多的数据库单表查询接口:public interface Cust...原创 2019-12-10 14:05:44 · 1784 阅读 · 0 评论 -
微服务优化之使用gRPC做微服务的内部通信
使用gRPC做微服务的内部通信gRPC是一个由Google开源的远程服务调用框架,具有多路复用和双向流式通信的特性。大家好,在本文中将为大家介绍为什么我们应该使用gRPC代替RESTful或JSON,来开发微服务内部的通信接口。什么是gRPC?gRPC是一个高性能的、开源的、普遍通用的RPC框架。简单地说,它能够帮助我们建立透明的服务端和客户端通信系统。Google开发了GRPC并且将其...原创 2020-03-09 08:33:50 · 987 阅读 · 0 评论 -
如何为SpringBoot服务添加HTTPS证书
HTTPS是HTTP的安全版本,旨在提供数据传输层安全性(TLS)。当你的应用不使用HTTP协议的时候,浏览器地址栏就会出现一个不安全的提示。HTTPS加密每个数据包以安全方式进行传输,并保护敏感数据免受窃听者或黑客的攻击。您可以通过在Web应用程序上安装SSL证书来实现HTTPS,互联网上受信任的证书通常是需要(CA)颁发的证书。为了学习目的,您也可以使用自签名证书,比如:使用Java Key...原创 2020-03-13 09:24:16 · 4070 阅读 · 1 评论 -
使用@AutoConfigureBefore、After、Order调整Spring Boot自动配置顺序
前言Spring Boot是Spring家族具有划时代意义的一款产品,它发展自Spring Framework却又高于它,这种高于主要表现在其最重要的三大特性,而相较于这三大特性中更为重要的便是Spring Boot的自动配置(AutoConfiguration)。与其说是自动,倒不如说是“智慧”,该框架看起来好像“更聪明”了。因此它也顺理成章的成为了构建微服务的基础设施,稳坐第一宝座。生活之道,在于取舍。程序设计何尝不是,任何决定都会是一把双刃剑,Spring Boot的自动配置解决了Spring .原创 2020-07-08 08:36:19 · 16478 阅读 · 2 评论 -
基于SpringBoot AOP面向切面编程实现Redis分布式锁
锁定的目标是确保相互排斥其访问的资源。实际上,此资源通常是字符串。使用redis实现锁主要是将资源放入redis中并利用其原子性。当其他线程访问时,如果Redis中已经存在此资源,则不允许进行某些后续操作。Spring Boot通过RedisTemplate使用Redis,在实际使用过程中,分布式锁可以.原创 2020-07-08 09:44:29 · 1500 阅读 · 0 评论 -
结合SpEL使用@Value-基于配置文件或非配置的文件的值注入-Spring Boot
本文主要介绍Spring @Value 注解注入属性值的使用方法的分析,文章通过示例代码非常详细地介绍,对于每个人的学习或工作都有一定的参考学习价值在使用spring框架的项目中,@Value是经常使用的注解之一。其功能是将与配置文件中的键对应的值分配给其带注解的属性。在日常使用中,我们常用的功能相对简单。本文使您系统地了解@Value的用法。@Value注入形式根据注入的内容来源,@ Value属性注入功能可以分为两种:通过配置文件进行属性注入和通过非配置文件进行属性注入。非配置文件注入的类型如下原创 2020-07-09 08:24:46 · 1279 阅读 · 0 评论 -
Spring Security OAuth2之resource_id配置与验证
一、resource_id的作用Spring Security OAuth2 架构上分为Authorization Server认证服务器和Resource Server资源服务器。我们可以为每一个Resource Server(一个微服务实例)设置一个resourceid。Authorization Server给client第三方客户端授权的时候,可以设置这个client可以访问哪一些Resource Server资源服务,如果没设置,就是对所有的Resource Server都有访问权限。原创 2020-07-28 09:44:14 · 8163 阅读 · 1 评论 -
超给力,一键生成数据库文档-数据库表结构逆向工程
数据库文档是我们在企业项目开发中需要交付的文档,通常需要开发人员去手工编写。笔者最近在github上面发现一个数据库文档生成工具。原创 2020-08-04 07:05:46 · 2325 阅读 · 1 评论 -
SpringBoot实现本地存储文件上传及提供HTTP访问服务
笔者计划为大家介绍分布式文件系统,用于存储应用的图片、word、excel、pdf等文件。在开始介绍分布式文件系统之前,为大家介绍一下使用本机存储来存放文件资源。二者的核心实现过程是一样的:上传文件,保存文件(本节是本地磁盘)返回文件HTTP访问服务路径给前端,进行上传之后的效果展示一、复习服务端接收上传的目的是提供文件的访问服务,那么对于SpringBoot而言,有哪些可以提供文件访问的静态资源目录呢?classpath:/META-INF/resources/ ,classpath:原创 2020-08-11 10:52:21 · 4837 阅读 · 0 评论 -
精讲响应式webclient第1篇-响应式非阻塞IO与基础用法
笔者在之前已经写了一系列的关于RestTemplate的文章,如下:精讲RestTemplate第1篇-在Spring或非Spring环境下如何使用精讲RestTemplate第2篇-多种底层HTTP客户端类库的切换精讲RestTemplate第3篇-GET请求使用方法详解精讲RestTemplate第4篇-POST请求方法使用详解精讲RestTemplate第5篇-DELETE、PUT等请求方法使用详解精讲RestTemplate第6篇-文件上传下载与大文件流式下载精讲RestTempla原创 2020-08-20 07:58:30 · 1881 阅读 · 0 评论 -
精讲响应式WebClient第2篇-GET请求阻塞与非阻塞调用方法详解
本文是精讲响应式WebClient第2篇,前篇的blog访问地址如下:精讲响应式webclient第1篇-响应式非阻塞IO与基础用法在上一篇文章为大家介绍了响应式IO模型和WebClient的基本用法。本节来继续深入的为大家介绍:如何使用WebClient作为Http客户端发送GET请求与进行响应结果的接收。一、block()阻塞式获取响应结果WebClient客户端既支持同步异步、阻塞与非阻塞IO,我们先来为大家介绍一下同步阻塞式的编程方式。即:在请求发送之后使用block()方法,阻塞当前线原创 2020-08-21 07:40:23 · 3074 阅读 · 6 评论 -
精讲响应式WebClient第3篇-POST、DELETE、PUT方法使用
本文是精讲响应式WebClient第3篇,前篇的blog访问地址如下:精讲响应式webclient第1篇-响应式非阻塞IO与基础用法精讲响应式WebClient第2篇-GET请求阻塞与非阻塞调用方法详解一、RESTful风格与HTTP method熟悉RESTful风格的朋友,应该了解RESTful风格API使用HTTP method表达对资源的操作。常用HTTP方法RESTful风格语义(操作)GET查询、获取数据POST新增、提交数据DELETE删除数据原创 2020-08-22 06:08:42 · 2370 阅读 · 0 评论 -
精讲响应式WebClient第4篇-文件上传与下载
本文是精讲响应式WebClient第4篇,前篇的blog访问地址如下:精讲响应式webclient第1篇-响应式非阻塞IO与基础用法精讲响应式WebClient第2篇-GET请求阻塞与非阻塞调用方法详解精讲响应式WebClient第3篇-POST、DELETE、PUT方法使用WebClient是从Spring 5开始提供的一个HTTP客户端库,为了使用WebClient进行文件上传和下载,需要我们先编写服务端的支持文件上传和下载的程序。请参考我之前写的一篇文章:SpringBoot实现本地存储文原创 2020-08-23 07:36:44 · 1939 阅读 · 0 评论 -
精讲响应式WebClient第5篇-请求超时设置与异常处理
本文是精讲响应式WebClient第5篇,前篇的blog访问地址如下:精讲响应式webclient第1篇-响应式非阻塞IO与基础用法精讲响应式WebClient第2篇-GET请求阻塞与非阻塞调用方法详解精讲响应式WebClient第3篇-POST、DELETE、PUT方法使用精讲响应式WebClient第4篇-文件上传与下载本文来为大家介绍一下,当WebClient请求发生异常的时候,该如何处理。为了讲解异常处理,我们需要先制造出异常,所以我们先为大家介绍:请求超时时长的设置。一、请求超时时原创 2020-08-24 07:02:04 · 4561 阅读 · 2 评论 -
Spring Security框架下实现两周内自动登录“记住我“功能
本文是Spring Security系列中的一篇。在上一篇文章中,我们通过实现UserDetailsService和UserDetails接口,实现了动态的从数据库加载用户、角色、权限相关信息,从而实现了登录及授权相关的功能。这一节就在此基础上新增,登录过程中经常使用的“记住我”功能,也就是我们经常会在各种网站登陆时见到的"两周内免登录",“三天内免登录”的功能。该功能的作用就是:当我们登录成功...原创 2020-08-25 05:44:37 · 1025 阅读 · 0 评论