SpringBoot
文章平均质量分 92
九月清晨柳成荫
磨砺修仙,法力无边。
展开
-
SpringBoot - OAuth2第三方登录之QQ登录
之前写过一篇OAuth2 - 第三方登录之新浪登录,提到过QQ审核很复杂,我之前提交审核很多次,各种原因失败,这一次总算成功了,所以便来记录一下其中过程。QQ登录需要做哪些准备?1、服务器+备案过的域名。2、一个能跑起来的服务,且登录页面正常,有QQ登录的跳转按钮。可以通过ICP备案这个网站去查询你的备案信息。红框标出来的,就是下面创建应用要使用的。QQ互联 - 创建应用进入到QQ互联官网,登录之后需要先进行一把开发者身份认证(需要手持身份证)。开发者身份审核通过之后,就可以去应用管理里创建原创 2021-12-18 00:15:12 · 2301 阅读 · 0 评论 -
Apollo - 阿波罗配置中心使用,一文搞定!
Apollo基本概念一、简介Apollo - A reliable configuration management systemApollo的Github地址Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用的不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。Apollo包括服务端和客户端两部分:1、服务端基于Spring Boot和Spring Cloud开发,打包后可以直接运行,不需要额外安原创 2021-07-30 17:52:55 · 20334 阅读 · 0 评论 -
SpringBoot - Spring事件监听机制的简单使用
什么是Spring事件监听机制Spring的ApplicaitonContext可以发布事件和注册相应的事件监听器。事件监听和发布的三个概念1、事件源:事件的生产者,任何一个event都有一个事件源。2、事件发布器:它是事件和事件监听器的一个桥梁,负责把事件通知到事件监听器。3、事件监听器注册表:用于存储事件监听器。事件类(ApplicationEvent)ApplicationEvent继承自EventObject,其包含一个构造函数ApplicationEvent(Object sourc原创 2021-06-20 14:50:05 · 564 阅读 · 0 评论 -
SpringBoot - SpringSecurity结合JWT的身份验证及动态权限解决方案
花了点时间写了一个SpringSecurity集合JWT完成身份验证的Demo,并按照自己的想法完成了动态权限问题。在写这个Demo之初,使用的是SpringSecurity自带的注解权限,但是这样权限就显得不太灵活,在实现之后,感觉也挺复杂的,欢迎大家给出建议。Demo下载地址,见文末。JWT是什么可以参考我另一篇博文:浅谈JWT身份认证及其优缺点认证流程及授权流程我画了个建议的认证授权流程图,后面会结合代码进行解释整个流程。一、登录认证阶段实现SpringSecurity的UsernameP原创 2021-03-28 03:01:01 · 2374 阅读 · 0 评论 -
SpringBoot - OAuth2第三方登录之新浪微博登录
之前写过一篇OAuth2 - 第三方登录之微信登录,但是微信的开放平台的资质需要有公司/企业才能注册。如果是个人的话,可以使用其他个人开发者就可以使用的。比如QQ、新浪微博。QQ的话,需要审核之后才能使用,需要手持身份证照。而微博的话,在开发期间使用无需审核就可以使用。微博开放平台 - 创建应用微博 - 开放平台地址1、登录之后选择网站接入2、完善个人开发者信息3、创建应用创建自己要使用微博登录功能的应用。4、设置回调地址即登录授权成功之后的回调地址5、添加测试用户测试用户即微原创 2020-06-19 23:31:43 · 2168 阅读 · 4 评论 -
SpringBoot - 阿里云OSS对象存储简介及简单上传
OSS是一种分布式文件存储的一个不错选择,对象存储服务(Object Storage Service,OSS)是一种海量、安全、低成本、高可靠的云存储服务,适合存放任意类型的文件。申请阿里OSS,创建Bucketoss是收费的,每个bucket是一个存储空间,可以根据不同的项目创建不同的Bucket。入门示例1、引入pom依赖<dependency>...原创 2020-02-19 16:48:20 · 2455 阅读 · 0 评论 -
logback - 自定义日志脱敏组件,一种不错的脱敏方案
前言在我们书写代码的时候,会书写许多日志代码,但是有些敏感数据是需要进行安全脱敏处理的。对于日志脱敏的方式有很多,常见的有①使用conversionRule标签,继承MessageConverter②书写一个脱敏工具类,在打印日志的时候对特定特字段进行脱敏返回。两种方式各有优缺点:第一种方式需要修改代码,不符合开闭原则。第二种方式,需要在日志方法的参数进行脱敏,对原生日志有入侵行为。自定义脱敏组件(slf4j+logback)一个项目在书写了很多打印日志的代码,但是后面有了脱敏需求,如果我们去原创 2021-01-29 20:20:09 · 12853 阅读 · 6 评论 -
slf4j+logback - logback.xml配置文件解析
前言以前写代码,不注重书写log日志,都是通过system.out.println来当做日志使用。后来看了别人的代码,才知道日志的重要性。一般来说,在调用其他地方接口之前一定要打印日志,将传参打印一下,便于排查问题。即使我们不配置logback.xml,其实控制台依然会输出日志(有默认的输出方案)。我们可以通过logback.xml做一些个性化的日志输出,也可以定义一些输出到文件的日志输出方式等等。写这个博客,主要是方便以后需要用到logback能一下找到。在此之前,搜到很多一模一样的关于logbac原创 2021-01-09 00:07:17 · 1649 阅读 · 1 评论 -
SpringBoot - AOP+自定义注解实现一个日志插件
1、引入相关依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId></dependency><dependency> <groupId>org.projectlombok</groupId> <art原创 2020-12-29 00:57:52 · 753 阅读 · 0 评论 -
SpringBoot - 支付宝支付之沙箱环境简单使用
创建应用1、进入支付宝开放平台 支付宝开放平台2、完善信息3、接入应用支付宝使用的加密方式1、对称加密 - 不安全即加密和解密用同一种算法(钥匙),比如发送方给接受方要发送一串文字,但是不能让人知道,所以需要加密,将加密后的字符串通过网络传输,给到接收方,接收方收到秘闻,用同一种算法获取明文。因此只要知道了这种算法(钥匙),在网络传输中截取到,就可以随意解密,这种方式不安全。2、非对称加密即加密时用算法A(秘钥A),解密的时候用算法B(秘钥B),即使在网络传输截取到密文,由于不知道秘原创 2020-07-10 14:41:17 · 3549 阅读 · 2 评论 -
JWT - 通过Axios拦截器完成Token转发实现单点登录
前端部分需要将token字符串和用户信息存入的Cookie中,因此需要引入js-cookie。前端采用axios发送请求,所以还需要引入axios。1、封装axios创建一个request.js文件,用来封装axios。import axios from 'axios'; // 引入axiosimport cookie from 'js-cookie'; // 引入js-cookie...原创 2020-04-23 21:57:29 · 1329 阅读 · 0 评论 -
SSO - 使用cookie和session实现单点登录
什么是单点登录单点登录(SingleSignOn,SSO),就是通过用户的一次性鉴别登录。当用户在身份认证服务器上登录一次以后,即可获得访问单点登录系统中其他关联系统和应用软件的权限,同时这种实现是不需要管理员对用户的登录状态或其他信息进行修改的,这意味着在多个应用系统中,用户只需一次登录就可以访问所有相互信任的应用系统。这种方式减少了由登录产生的时间消耗,辅助了用户管理,是目前比较流行的。cookie+session实现单点登录之前的文章有记录过使用CAS开源项目来实现单点登录,也有通过JWT来实现原创 2020-06-22 01:19:45 · 3867 阅读 · 1 评论 -
SpringSession - 分布式Session解决方案及SpringSession基本使用
分布式Session的几种解决方案1、Session复制Tomcat服务器互相同步session。优点:web-server (Tomcat) 原生支持,只需要修改配置文件缺点:1、session同步需要数据传输,占用大量网络带宽,降低了服务器群的业务处理能力2、任意一台web-server保存的数据都是所有web-server的sesdion总和,受到内存限制无法水平扩展更多的web-server3、大型分布式集群情况下,由于所有web-server都全量保存数据,所以此方案不可取。2原创 2020-06-20 20:39:49 · 1606 阅读 · 0 评论 -
Redis - 消息发布订阅机制
Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。发布者生产消息放到队列里,多个监听队列的消费者都会收到同一份消息。Redis客户端可以订阅任意数量的频道。订阅/发布消息图下图展示了频道 channel1 , 以及订阅这个频道的三个客户端 —— client2 、 client5 和 client1 之间的关系:当有新消息通过...原创 2020-05-04 13:30:31 · 1020 阅读 · 0 评论 -
SpringBoot - 整合Swagger2
简介前后端分离开发模式中,api文档是最好的沟通方式。Swagger是一个规范和完整的框架,用于生成、描述、调用和可视化RESTful风格的 Web 服务。1、及时性 (接口变更后,能够及时准确地通知相关前后端开发人员)2、规范性 (并且保证接口的规范性,如接口的地址,请求方式,参数及响应格式和错误信息)3、一致性 (接口信息一致,不会出现因开发人员拿到的文档版本不一致,而出现分歧)4...原创 2020-05-01 14:30:48 · 302 阅读 · 0 评论 -
OAuth2 - 第三方登录之微信登录
要使用微信登录,需要在微信开放平台去注册开发者资质,只能是企业类型用户。在注册之后会提供微信id和微信秘钥,此外还需要申请网站应用名称和域名地址。流程参考微信登录功能一、生成微信登录的二维码微信提供了生成二维码的固定地址,也提供了将二维码嵌入到自己页面的方式,这里采用前者。第三方使用网站应用授权登录前请注意已获取相应网页授权作用域(scope=snsapi_login)。然后可以访问http...原创 2020-04-24 01:00:07 · 1784 阅读 · 0 评论 -
SpringBoot - 整合ActiveMQ
简介Apache ActiveMQ是一个开源的消息中间件,它不仅完全支持JMS1.1规范,而且支持多种编程语言,例如C/C++、C#、Delphi 、Erlang 、Adobe Flash 、Haskell 、Java 、JavaScript 、Perl 、 PHP 、Pike 、Python 和 Ruby 等,也支持多种协议,例如 OpenWire 、REST 、STOMP 、WS-Noti...原创 2020-04-02 11:28:16 · 239 阅读 · 0 评论 -
SpringBoot - 整合WebSocket及STOMP部分API简介
WebSocket简介WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。WebSocket是一个消息架构,不强制使用任何特定的消息协议,它依赖于应用层解释消息的含义...原创 2020-04-01 23:35:33 · 1229 阅读 · 0 评论 -
SpringBoot - SpringCache缓存
一、概述SpringCache本身是一个缓存体系的抽象实现,并没有具体的缓存能力,要使用SpringCache还需要配合具体的缓存实现来完成。虽然如此,但是SpringCache是所有Spring支持的缓存结构的基础,而且所有的缓存的使用最后都要归结于SpringCache。二、缓存注解SpringCache缓存功能的实现是依靠下面的这几个注解完成的。@EnableCaching:开启...原创 2020-03-18 19:58:07 · 385 阅读 · 0 评论 -
SpringBoot - CORS跨域支持
CORS (Cross-Origin Resource Sharing)是由W3C制定的一种跨域资源共享技术标准,其目的就是为了解决前端的跨域请求。最常见的前端跨域请求解决方案是JSONP,但 是JSONP只支持 GET 请求,这是一个很大的缺陷,而CORS则支持多种HTTP请求方法。一、CORS跨域请求过程1、GET、POST和HEAD请求以get为例,浏览器发送请求时,请求头Reques...原创 2020-03-30 01:11:48 · 202 阅读 · 3 评论 -
SpringBoot - Jackson、Gson、fastJson返回JSON数据
一、Jacksonspring-boot-starter-web中默认加入了jackson-databind作为JSON处理器。在jackson中,对要忽略的属性上加@JsonIgnore即可,而对于时间进行格式化,则需要在需要格式化的属性上面加上@JsonFormat注解,并指定格式。1、创建POJO类@Datapublic class Student { /** ID */ ...原创 2020-03-29 19:56:34 · 1119 阅读 · 0 评论 -
SpringBoot - 整合SpringSecurity
一、引入相关依赖<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.3.RELEASE</version></par...原创 2020-03-29 15:48:24 · 724 阅读 · 1 评论 -
SpringBoot - 整合Shiro
一、引入相关依赖后面两个依赖可以不引入,还没有使用过Redis来做Shiro的缓存。后续如果有用到,可能会更新到博文。<!-- Shiro --><dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring</artifactId>...原创 2020-03-26 11:48:57 · 319 阅读 · 0 评论 -
SpringBoot - 异步任务、定时任务(Scheduled和Quartz)、邮件任务
异步任务在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的;但是在处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使用多线程来完成此类任务,其实,在Spring 3.x之后,就已经内置了@Async来完美解决这个问题。注解使用在SpringBoot里,需要给启动类添加@EnableAsync来开启异步注解。使用@Async异步注解:@Servicepu...原创 2020-03-23 10:48:08 · 1234 阅读 · 0 评论 -
SpringDataElasticSearch - NativeSearchQueryBuilder过滤聚合高亮查询
本文要实现的一个功能,根据品牌、分类、规格、价格过滤查询商品的功能,并对查询结果的关键字进行高亮显示。只做后端功能。本文是以代码驱动,如果看不太懂,可以先复制代码,再慢慢看,注释很详细。1、引入相关依赖主要就是fastjson和spring-boot-starter-data-elasticsearch(SpringBoot项目),fastJson的作用是转换对象使用,当然也可以进行时间格...原创 2020-03-22 12:28:05 · 27440 阅读 · 2 评论 -
SpringBoot - 整合ElasticSearch及基本使用
整合ElasticSearch一、引入依赖及配置1、引入依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId></dependenc...原创 2020-03-22 11:13:22 · 397 阅读 · 0 评论 -
SpringBoot - RabbitMQ从零到整合使用
RabbitMQ是一个由erlang开发的AMQP(Advanved Message Queue Protocol)的开源实现。整合RabbitMq一、引入依赖以及配置1、引入依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>sprin...原创 2020-03-19 16:57:11 · 460 阅读 · 1 评论 -
SpringBoot - 整合Redis缓存cache及键值序列化
前面的SpringCache缓存说过在没有引入其他缓存中间件时,默认使用的是ConcurrentMapCacheManager=ConcurrentMapCache,是将数据保存在ConcurrentMap<Object, Object>中。在实际开发中,我们一般都会使用redis、memcached、ehcache来作为缓存中间件。整合RedisRedis是一个开源(BSD许可...原创 2020-03-19 11:06:41 · 2327 阅读 · 1 评论