SpringSecurity精讲系列
文章平均质量分 94
在Java的知识体系里,解决安全问题的框架,最著名的有2个:Shiro和Spring Security。本系列教程主要是讲解Spring Security相关内容,通过本系列教程,一一哥 会在案例中结合理论、源码,带领大家实现从入门到熟练掌握。
一一哥Sun
孙玉昌,十年软件开发及授课经验,专注大学生毕业设计及面试求职私塾式指导!阿里云专家、CSDN博客专家、掘金优质创作者!曾任国内物流行业独角兽企业架构师,参与国内领先的智能物流系统平台天眼/冷链/订单/车次中心系统研发;主导某在线教育App及后台架构;负责大庆油田采油管理系统,春华旅业云计算系统等大型项目研发。目前担任某知名机构技术研发经理,上海校区教学负责人,培养了大批入职阿里、IBM、百度、华为等名企的高薪学生。坚持一心做教育,做一流教育的理念,被学生爱称为"一一哥"!
展开
-
Spring Security系列教程30--系列文章总结
一. 内容回顾截止到本篇文章,一一哥 就带各位详细地学完了SpringSecurity中的各个核心内容,并结合源码带大家研读了SpringSecurity的底层设计。如果你认真地看完了我这个系列的每一篇文章,并跟着每篇教程中的代码编写了对应的案例,现在应该就可以达到从一开始对SpringSecurity的懵懂无知,到今天的熟练使用了。最后 壹哥 再把整个系列的内容给各位梳理一下,方便各位复习掌握,我在这里做了一个SpringSecurity核心内容的思维导图,咱们一起看看吧。1. Sprin原创 2021-11-08 08:55:30 · 807 阅读 · 4 评论 -
Spring Security系列教程29--OAuth2.0协议详解
前言截止到现在,一一哥 已经带各位把Spring Security中的主要功能学完了,并且剖析了这些内容的底层实现原理,希望你可以有所收获。但是在安全认证领域,还有另一种很重要的授权机制---OAuth2.0开放授权。而且OAuth2.0开放授权与Spring Security经常配合使用,这两者之间可以说是“焦不离孟,孟不离焦”的搭配关系,所以为了进一步掌握Spring Security,在这里 壹哥 给大家再介绍另一个OAuth2.0开放授权协议。OAuth2.0开放授权并不是Spring原创 2021-11-05 10:37:41 · 2536 阅读 · 1 评论 -
Spring Security系列教程28--SpringSecurity实现CAS单点登录--搭建CAS客户端
前言在上一章节中,一一哥 带各位搭建了CAS Server端项目,也就是我们构建了一个统一的单点登录认证中心,接下来就可以搭建CAS客户端项目,然后实现客户端与服务端之间的交互认证,从而完成单点登录。接下来各位就跟着 壹哥 搭建CAS客户端,最终把单点登录实现出来吧!一. 搭建CAS客户端1. 创建新项目我们在之前的Spring Security项目中,创建一个新的module模块,作为CAS Client项目,如下图。2. 引入依赖然后在这个模块的pom.xml文件中,引入原创 2021-11-04 12:56:05 · 3673 阅读 · 10 评论 -
Spring Security系列教程27--Spring Security实现CAS单点登录--搭建CAS服务端
前言在上一章节中,一一哥 给各位介绍了单点登录的概念、执行流程原理,并且给大家介绍了CAS单点登录解决方案,在CAS解决方案中,我们需要搭建CAS服务端和CAS客户端,本文就开始给大家介绍如何实现CAS服务端。在这里,我给大家介绍一个开源的CAS服务端模板cas-overlay-template,接下来请跟我一起看看怎么实现吧。一. 搭建CAS服务器1. 概述为了测试我前面讲解的CAS请求执行流程,我们需要搭建一个CAS测试环境,本篇内容主要是带领大家搭建一个CAS Server服务端环境。原创 2021-11-03 09:44:30 · 2076 阅读 · 9 评论 -
Spring Security系列教程25--解决Spring Security环境中的跨域问题
前言上一章节中,一一哥 给各位讲解了同源策略和跨域问题,以及跨域问题的解决方案,在本篇文章中,我会带大家进行代码实现,看看在Spring Security环境中如何解决跨域问题。一. 启用Spring Security 的CORS支持1. 创建web接口我先在SpringBoot环境中,创建一个端口号为8080的web项目,注意这个web项目没有引入Spring Security的依赖包。然后在其中创建一个IndexController,定义两个测试接口以便被ajax进行跨域访问。@R原创 2021-11-01 09:17:06 · 931 阅读 · 0 评论 -
Spring Security系列教程24--Spring Security环境中存在的跨域问题
前言在前后端不分离时,我们利用前面讲过的Spring Security的各种知识点,就可以实现对项目的权限管控。但是在前后端分离时,尤其是在引入了Spring Security后的前后端分离时,我们从前端发来的请求,就会存在一些问题。这些问题就是跨域而导致的问题!对于前后端分离时,跨域而产生的安全问题,我们该怎么解决呢?接下来请跟着 一一哥 来学习如何解决吧!在解决跨域问题之前,我们先来了解一下何为跨域问题,怎么产生的跨域问题,怎么解决这个跨域问题。一. 跨域问题的由来1. 同源策略原创 2021-10-29 12:32:12 · 1138 阅读 · 0 评论 -
Spring Security系列教程23--Spring Security的四种权限控制方式
前言在前面的章节中,一一哥 已经给大家介绍了Spring Security的很多功能,在这些众多功能中,我们知道其核心功能其实就是 认证+授权。在前面我们分别基于内存模型、基于默认的数据库模型、基于自定义数据库模型实现了认证和授权功能,但是不管哪种方式,我们对某个接口的拦截限制,都是通过编写一个SecurityConfig配置类,在该类的configure(HttpSecurity http)方法中,通过http.authorizeRequests().antMatchers("/admin/**").原创 2021-10-26 09:05:23 · 1737 阅读 · 4 评论 -
Spring Security系列教程22--Spring Security中的密码加密
前言截止到现在,一一哥 已经带各位学习了很多关于Spring Security的知识点,但是Spring Security作为一个安全框架,其中必然就应该带有安全加密方面的内容,所以本篇文章,一一哥 就带各位来学习Spring Security中的密码加密机制。Lets go!一. 密码加密简介1. 散列加密概述我们开发时进行密码加密,可用的加密手段有很多,比如对称加密、非对称加密、信息摘要等。在一般的项目里,常用的就是信息摘要算法,也可以被称为散列加密函数,或者称为散列算法、哈希函数。原创 2021-10-24 10:30:25 · 4005 阅读 · 4 评论 -
Spring Security系列教程21--会话管理之实现集群会话
前言现在我们已经掌握了如何防御会话固定攻击,处理会话过期,对会话进行并发控制等,但是这些会话处理手段都是针对单机环境下的,在现在的大型项目中,很多时候都是采用分布式开发方案。一旦涉及到分布式方案,就意味着我们的服务器可能会有多台,而我们的项目也可能会根据业务被拆分成了若干个子服务,每个服务又可能被部署在不同的服务器上。这时候问题就来了,以前单台服务器的时候,我们的会话很好管理,现在有多台服务器,那会话岂不是有多个了?这时候我们把服务器集群环境下的会话和单个用户关联起来?啊啊啊...是不是感觉很复杂!原创 2021-10-21 10:32:23 · 2168 阅读 · 2 评论 -
Spring Security系列教程20--会话管理之会话并发控制
前言现在我们已经掌握了如何防御会话固定攻击,以及在会话过期时的处理策略,但是这些都是针对单个HttpSession来说的,对于会话来说,我们还有另一种情况需要考虑:会话并发控制!那什么是会话并发控制呢?假如我想实现 “在我们的网站中,同一时刻只允许一个用户登录” 这样的效果,该怎么做?请各位带着以上的这些问题,跟着 一一哥 继续往下学习吧。一. 会话并发控制1. 会话并发控制首先我们来了解一下会话并发控制的概念。有时候出于安全的目的,我们可能会有这样的需求,就是规定在同一个系统中原创 2021-10-18 09:04:08 · 1211 阅读 · 0 评论 -
Spring Security系列教程19--会话管理之处理会话过期
前言在上一章节中,一一哥 给各位讲解了HTTP协议、会话、URL重新、会话固定攻击等概念,并且实现了对会话固定攻击的防御拦截。在Spring Security中,其实除了可以对会话固定攻击进行拦截之外,还可以对会话过期进行处理,也就是会话可能会过期,过期了该怎么处理。接下来请各位跟着 壹哥 继续学习,看看会话过期时到底怎么处理的吧。一. 会话过期1. 会话过期概念在处理会话过期之前,我们首先得知道啥是会话过期。所谓的会话过期,是指当用户登录网站后,较长一段时间没有与服务器进行交互,将原创 2021-10-14 09:07:36 · 3936 阅读 · 4 评论 -
Spring Security系列教程18--会话管理之防御固定会话攻击
前言在前面几个章节中,一一哥 带各位学习了如何实现基于数据库进行认证授权,如何给登录界面添加图形验证码,如何进行自动登录和注销登录,那么Spring Security的功能难道只有这些吗?肯定不是的,它的宝藏还有很多,我们还需要继续往下学习研究。今天 壹哥 就带各位学习另一个很重要的功能,就是会话管理!你可能会问:会话管理?干嘛的?有哪些效果?我们想一下:我们的项目上线后,如果黑客对我们的项目进行会话固定攻击怎么办?如果用户登录后,长时间不进行任何操作,要不要让用户重新登录?如果你原创 2021-10-12 09:04:41 · 1179 阅读 · 2 评论 -
Spring Security系列教程17--注销登录的实现及原理分析
前言经过前面几个章节的学习,一一哥 已经带各位实现了两种方式的自动登录。咱们现在已经学会了如何自动登录,那么又该如何退出登录呢?接下来请再跟着 壹哥 把注销登录功能也实现一下吧。一. 注销登录1. 代码实现我们直接在之前案例的基础上进行代码实现,这里还是在SecurityConfig类中配置,其实退出登录功能的实现很简单。@EnableWebSecurity(debug = true)public class SecurityConfig extends WebSecurityCon原创 2021-10-09 14:52:27 · 1092 阅读 · 2 评论 -
Spring Security系列教程16--基于持久化令牌方案实现自动登录
前言在上一章节中,一一哥 带各位基于散列加密方案实现了自动登录,并且给各位介绍了散列加密算法,其实还有另一种自动登录的实现方案,也就是基于持久化令牌方案来进行实现。接下来请跟 一一哥 学习这种方案该怎么实现吧。一. 持久化令牌方案简介1. 持久化令牌方案有的小伙伴会问,既然我们要基于持久化令牌来实现自动登录,那啥是持久化令牌啊?所以 一一哥 先给大家做个概念解释。所谓的持久化令牌的实现方案,其实在交互上与我们前面章节讲的散列加密方案一致,只不过是在用户勾选Remember-me之后,将生原创 2021-10-09 14:46:38 · 3308 阅读 · 9 评论 -
Spring Security系列教程15--基于散列加密方案实现自动登录
前言在前面的2个章节中,一一哥 带大家实现了在Spring Security中添加图形验证码校验功能,其实Spring Security的功能不仅仅是这些,还可以实现很多别的效果,比如实现自动登录,注销登录等。有的小伙伴会问,我们为什么要实现自动登录啊?这个需求其实还是很常见的,因为对于用户来说,他可能经常需要进行登录以及退出登录,你想想,如果用户每次登录时都要输入自己的用户名和密码,是不是很烦,用户体验是不是很不好?所以为了提高项目的用户体验,我们可以在项目中添加自动登录功能,当然也要给用户提原创 2021-09-26 09:15:28 · 849 阅读 · 16 评论 -
Spring Security系列教程14--基于自定义的认证提供器实现图形验证码
前言在上一个章节中,一一哥 带大家实现了如何在Spring Security中添加执行自定义的过滤器,进而实现验证码校验功能。这种实现方式,只是实现验证码功能的方式之一,接下来我们再学习另一种实现方式,就是利用AuthenticationProvider来实现验证码功能,通过这个案例,我们学习如何进行自定义AuthenticationProvider。一. 认证提供器简介在上一章节中,我带各位利用自定义的过滤器实现了图形验证码效果,接下来我们利用另一种方式,基于自定义的认证提供器来实现图形验证码原创 2021-09-26 09:10:55 · 1077 阅读 · 7 评论 -
Spring Security系列教程13--基于过滤器实现图形验证码
前言在前两个章节中,一一哥 带大家学习了Spring Security内部关于认证授权的核心API,以及认证授权的执行流程和底层原理。掌握了这些之后,对于Spring Security,我们不仅做到了 "知其然",而且也做到了 "知其所以然"!在现在的求职环境下,只知道某个技能点的用法是远远不够的,面试官会要求我们研究某个技术的底层实现原理,所以虽然前面的两章内容掌握起来很有难度,但是还是希望各位小伙伴结合源码认真研读,这样你才能在编程之路上走的更远更高!总是研究底层,对于我们初学者来说,既有难原创 2021-09-26 09:06:35 · 1126 阅读 · 3 评论 -
Spring Security系列教程12--Spring Security认证授权流程
在上一章节中,一一哥 带大家认识了Spring Security内部关于认证授权的几个核心API,以及这几个核心API之间的引用关系,掌握了这些之后,我们就能进一步研究分析认证授权的内部实现原理了。这样才真正的达到了 "知其所以然"!本篇文章中,壹哥 带各位小伙伴进一步分析认证授权的源码实现,请各位再坚持一下吧......一. Spring Security认证授权流程图概述在上一章节中,壹哥就给各位贴出过Spring Security的认证授权流程图,该图展示了认证授权时经历的核心AP...原创 2021-09-24 18:04:19 · 5462 阅读 · 15 评论 -
Spring Security系列教程11--Spring Security核心API讲解
前言经过前面几个章节的学习,一一哥 带大家实现了基于内存和数据库模型的认证与授权,尤其是基于自定义的数据库模型更是可以帮助我们进行灵活开发。但是前面章节的内容,属于让我们达到了 "会用" 的层级,但是 "为什么这么用",很多小伙伴就会一脸懵逼了。对于技术学习来说,我们追求的不仅要 "知其然",更要 "知其所以然"!本篇文章中,壹哥 就跟各位小伙伴一起来了解剖析Spring Security源码内部,实现认证授权的具体过程及底层原理。接下来请各位做好心理准备,以下的学习过程可能会让你心理 “稍有不适”原创 2021-09-24 17:49:11 · 2685 阅读 · 20 评论 -
Spring Security系列教程10--基于自定义数据库模型实现授权
前言在上一个章节中,一一哥 给大家讲解了如何基于默认的数据库模型来实现认证授权,在这种模型里,用户的信息虽然是保存在数据库中的,但是有很多的限制!因为我们必须按照源码规定的方式去建库建表,存在灵活性不足的问题。而我们真正开发时,用户角色等表肯定要根据自己的项目需求来单独设计,所以我们有必要进行用户及角色表的自定义设计。那么在本篇文章中,壹哥 就带各位,结合自己的实际项目需求,进行数据库和表的自定义设计,然后在这个自定义的数据库中实现用户信息的认证与授权工作。一. 核心API源码介绍1. Us原创 2021-09-17 15:52:01 · 1341 阅读 · 5 评论 -
Spring Security系列教程09--基于默认数据库模型实现授权
前言在上一个章节中,一一哥 给大家讲解了如何基于内存模型来实现授权,在这种模型里,用户的信息是保存在内存中的。你知道,保存在内存中的信息,是无法持久化的,也就是程序一旦关闭,或者断电等情况发生,内存中的信息就丢失了,所以这种方式并不适用于生产环境!那么我们肯定要把用户信息持久化, 但是持久化到哪里去呢?那就是数据库呗!数据库是我们做程序员必会必熟的知识点,尤其是做后端开发,开发时常用的数据库有MySQL和Oracle,本案例中我们采用的是MySQL数据库。一. JdbcUserDetailsMa原创 2021-09-17 15:45:31 · 1319 阅读 · 4 评论 -
Spring Security系列教程08--基于内存模型实现授权
前言在前面的几个章节中,一一哥 带大家学会了如何创建Spring Security项目,3种认证方式,以及在前后端分离时的安全处理方案。在之前的这几章节中,我们主要学习的还是关于 "认证" 的知识点,但是安全框架还有另一大核心功能,就是 "授权"!所以接下来请各位跟着 一一哥 来学习Spring Security的授权功能,只有 "认证" + "授权" 双剑合璧,才能真正发挥Spring Security的威力!这时候小伙伴会问,"一一哥,那啥是授权啊?我连授权还不知道呢,更别说怎么实现授权了,原创 2021-09-17 15:40:26 · 1348 阅读 · 10 评论 -
Spring Security系列教程07--前后端分离时的安全处理方案
前言在前面的几个章节中,一一哥 带大家学会了如何利用Spring Security来保护我们的Web项目,以及3种认证方式。你可能会觉得,Spring Security没啥东西啊,代码也不复杂呀!别急,我们的学习是渐进的,Spring Security的内容和功能都多着呢,我们要Get的点也多着呢。今天 一一哥 就带大家来学习一下在前后端分离的开发模式下,如何保护我们项目的安全。有的小伙伴会问,啥是前后端分离啊?如果你对此一无所知,一一哥 只能建议你先查阅一下相关资料,本文 一一哥 只能带你简单了解原创 2021-09-17 15:34:41 · 2711 阅读 · 6 评论 -
Spring Security系列教程06--实现HTTP摘要认证
前言在前面的2个章节中,一一哥 带大家认识了Spring Security中的第基本认证与表单认证 2种认证方式,其中表单认证是Spring Security默认的认证方式,也是开发时最常用的认证方式。有的小伙伴会问,不是还有第3种认证方式吗?对的,还有第三种摘要认证方式!在本文中,我们来学习了解一下HTTP摘要认证。但是对于摘要认证,我们仅做了解即可,因为这种认证方式仅比基本认证稍微安全一点,开发时用的也不是很多。抱着艺多不压身的心态,我们多了解一点反正也没坏处。一. HTTP摘要认证1.原创 2021-09-17 15:25:20 · 1426 阅读 · 5 评论 -
SpringSecurity系列教程汇总
因为CSDN没有分类归纳博客的功能,所以特写本帖汇总Spring Security 5.x系列教程,方便大家查阅!Spring Security系列教程01--Spring Security系列教程简介Spring Security系列教程02--初识Spring SecuritySpring Security系列教程03--创建SpringSecurity项目Spring Security系列教程04--实现HTTP基本认证Spring Security系列教程05--实现Form表单原创 2021-09-07 16:11:10 · 6872 阅读 · 27 评论 -
Spring Security系列教程05--实现Form表单认证
一. Form表单认证1. 认证方式我们从前文中得知,Spring Security中的认证方式可以分为HTTP层面和表单层面,常见的认证方式如下:①. HTTP基本认证; ②. Form表单认证; ③. HTTP摘要认证;在本文中,我们来学习Form表单认证。2. 表单认证简介其实在SpringBoot开发环境中,只要我们添加Spring Security的依赖包,就会自动实现表单认证。我们可以在WebSecurityConfigurerAdapter类的config(HttpS原创 2021-09-07 16:09:54 · 2110 阅读 · 14 评论 -
Spring Security系列教程04--实现HTTP基本认证
一. Spring Security的认证方式1. 认证概念认证: 认证就是用来判断系统中是否存在某用户,并判断该用户的身份是否合法的过程,解决的其实是用户登录的问题。认证的存在,是为了保护系统中的隐私数据与资源,只有合法的用户才可以访问系统中的资源。2. 认证方式在Spring Security中,常见的认证方式可以分为HTTP层面和表单层面,常见的认证方式如下:①. HTTP基本认证; ②. Form表单认证③. HTTP摘要认证;二. HTTP基本认证1. 基本认证概述原创 2021-09-07 15:16:33 · 2284 阅读 · 4 评论 -
Spring Security系列教程03--创建SpringSecurity项目
一. 搭建SpringBoot开发环境Spring Security系列教程会基于SpringBoot环境,我们会以案例迭代的方式进行开发,所以为了方便后续案例的编写,我们先提前搭建一个SpringBoot环境。1. 创建SpringBoot项目如各位对SpringBoot基础不熟悉,请参考本人的SpringBoot系列教程:https://blog.csdn.net/syc000666/article/details/105086898?spm=1001.2014.3001.5502S原创 2021-09-07 14:20:05 · 2083 阅读 · 10 评论 -
Spring Security系列教程02--初识Spring Security
一. Spring Security概念Spring Security是一个功能强大且高度可定制的,主要负责为Java程序提供声明式的 身份验证和访问控制 的安全框架。其前身是Acegi Security,后来被收纳为Spring的一个子项目,并更名为了Spring Security。Spring Security的底层主要是 基于 Spring AOP 和 Servlet 过滤器 来实现安全控制,它提供了全面的安全解决方案,同时授权粒度可以在 Web请求级和方法调用级 来处理身份确认和授权。二原创 2021-09-07 11:37:36 · 1755 阅读 · 0 评论 -
Spring Security系列教程01--Spring Security系列教程简介
Author:一一哥@IT私塾Version:1.0.0[TOC]前言Spring Security 是一个强大且高度可定制的安全框架,致力于为Java应用提供身份认证和授权功能。其前身是Acegi Security,在被收纳为Spring的子项目后更名为SpringSecurity。目前Spring Security 最新版本是 5.5.0 版本,新增了原生OAuth框架,并支持更加现代化的密码加密方式。随着SpringBoot的普及,在Java安全应用领域,Spring Secu原创 2021-09-07 11:25:55 · 1936 阅读 · 3 评论