SpringSecurity升级篇

传送门

SpringMVC的源码解析(精品)
Spring6的源码解析(精品)
SpringBoot3框架(精品)
MyBatis框架(精品)
MyBatis-Plus
SpringDataJPA
SpringCloudNetflix
SpringCloudAlibaba(精品)
Shiro
SpringSecurity
java的LOG日志框架
Activiti(敬请期待)
JDK8新特性
JDK9新特性
JDK10新特性
JDK11新特性
JDK12新特性
JDK13新特性
JDK14新特性
JDK15新特性
JDK16新特性
JDK17新特性
JDK18新特性
JDK19新特性
JDK20新特性
JDK21新特性
其他技术文章传送门入口

前言

本质就是一串过滤器配合实现的认证与授权功能,对,你没看错,全都是过滤器。
然后还有一个规约,OAuth2.0规约,腾讯QQ、微信、等等都遵守这个规约,典型应用就是QQ快捷登录、微信快捷登录,很多网站都支持QQ快捷登录,你本来登录的是A网站,结果用的是你自己的QQ账号和密码。

SpringSecurity入门篇
SpringSecurity升级篇

一、高级篇概念

1、入门案例

就引入个依赖,什么注解也没加,访问普通接口,就出现security的登录页面了,用户名固定user,密码是启动生成的随机密码。
在这里插入图片描述

2、本质

是一个过滤器链(十几个,34个?)

本质就是十几个过滤器组成过滤器链处理
在这里插入图片描述
SpringBoot帮我们配置了第一个步骤,就是DelegatingFilterProxy(本质就是将所有Security的过滤器加载到过滤器链),所以我们不用再配置这步了。
在这里插入图片描述
在这里插入图片描述

二、web权限方案(单机版)-入门篇

1、四个个核心过滤器

U开头这个是认证的核心过滤器,就这一个,而且应该是security优先级第二批次的过滤器(不是很确定,反正在前面)。剩余两个是授权的核心过滤器。F开头那个又是security框架优先级最末的过滤器。
在这里插入图片描述
优先级第一的过滤器,将Authentication和Session进行绑定的牛逼过滤器
在这里插入图片描述
四个核心过滤器
在这里插入图片描述

2、设置登录用户名和密码(四种方式)

方式一

方式一 : 配置yml文件
在这里插入图片描述

方式二

方式二:配置类 (这个Config类要继承一下WebSecurityConfigurerAdapter类)
在这里插入图片描述
配置类方式,就这边这一个类就搞定了
在这里插入图片描述

方式三

方式三 自定义编写实现类 在方式二的基础上,主要是实现UserDetailsService接口,实现用户名和密码从数据库取值
在这里插入图片描述
在这里插入图片描述
方式三强化转 查询数据库
在这里插入图片描述
在这里插入图片描述

方式四

其实还有方式四,就是写一个过滤器 extends UsernamePasswordAuthenticationFilter;
然后 重写三个方法
第一 重写 继承类父类也就是爷爷类里面的 认证成功和认证不成功两个方法
第二 重写 继承类的attemptAuthentication方法 (尚硅谷视频最后阶段就是用的方式四,个人觉得像产融平台这种方式三更简单,更舒服,只是不知道security框架的人,不好找,而方式四是个过滤器,相对更好理解。)

方式四系列截图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、自定义设置登录页面

在这里插入图片描述

三、web权限方案(单机版)-权限认证

1、四个方法(五个)

hasAuthority

在这里插入图片描述
在这里插入图片描述
admins权限
在这里插入图片描述
admins权限对应起来。
在这里插入图片描述

hasAnyAuthority

在这里插入图片描述
配置文件中访问规则 里面有 两个 权限
在这里插入图片描述
登录用户只要有其中任何一个 就有权限访问
在这里插入图片描述
在这里插入图片描述

hasRole

在这里插入图片描述
源码
在这里插入图片描述
db数据库查询的要自己拼接ROLE_前缀
在这里插入图片描述
配置类 加角色 sale,源码会自动将该角色变为 ROLE_sale,所以注意数据库存的sale,在写代码的时候要拼接一下ROLE_前缀。
在这里插入图片描述
在这里插入图片描述

hasAnyRole

在这里插入图片描述
在这里插入图片描述

access

SpEL表达式,可以创建复杂的限制
在这里插入图片描述
在这里插入图片描述

2、自定义403页面

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、注解使用

注解判断是否有角色
在这里插入图片描述
方法访问前验证(配合四大方法)
在这里插入图片描述
方法访问后验证(配合四大方法)
在这里插入图片描述
对返回的数据再次进行过滤。案例中只返回 username=admin1的数据,其他数据不返回。
在这里插入图片描述
对传入的参数进行过滤。案例中能被2整除的id就是参数传过来,不能的就不传过来
在这里插入图片描述

4、注解对应代码

加上前缀ROLE_
在这里插入图片描述
@Secured(“ROLE_sale”)
在这里插入图片描述
@PreAuthorize(“hasAnyAuthority(‘menu:system’)”)
在这里插入图片描述

5、注解总结图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6、注销

在这里插入图片描述

7、记住我功能(类似10天内免登录)

原理图
在这里插入图片描述
备注:接口认证通过后,关闭浏览器,再次访问这个接口时不用再次输入登录账号和密码去验证,直接就可以访问成功。
原理:第一次接口认证通过后,会给浏览器发一个cookie加密串,并且这个串同时存到了数据库(源码里面会创建一张persistant_logins的表);
浏览器关闭再次打开后二次访问接口时,会带上这个cookie加密串,然后和数据库对比,对比成功后,不用再次输入登录账号和密码去验证,直接就可以访问成功。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
深坑,还得前端页面搞个复选框,而且name必须叫remember-me这种。
在这里插入图片描述
深坑啊
在这里插入图片描述
在这里插入图片描述

8、CSRF理解

默认开启了保护,但是get这种请求不支持保护。
在这里插入图片描述
默认是开启的,如果不关闭,前端html页面就必须得写后面截图那些固定标签,不然就验证不通过。所以还是设置关闭了。
在这里插入图片描述
还得需要前端html支持
在这里插入图片描述
在这里插入图片描述

四、微服务权限方案-入门篇

1、概念

在这里插入图片描述
在这里插入图片描述

2、入门案例

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
认证过滤器
在这里插入图片描述
在这里插入图片描述
授权过滤器
在这里插入图片描述
配置类的小扩展功能
在这里插入图片描述

五、微服务权限方案-源码分析(王炸)

1、认证流程源码分析

认证核心流程(UserDetailsService就在 这个UsernamePasswordAuthenticationFilter里面,看这样子这个过滤器也是security框架优先级第一的过滤器)
在这里插入图片描述
1到2步:不是post提交就直接放行了
在这里插入图片描述
3到4.1步
在这里插入图片描述
3到4.2步,特别注意4.2就是把 上下文 SecurityContextHolder.getContext().setAuthentication(authResult);设置了。就是这步设置的上下文哦。因为在2大步里面就关联了UserDetailsService查询了数据库的。所以这边4.2的authResult也就是Authentication接口已经有非常足够的信息了。
在这里插入图片描述
之前的第二大步进行具体解析,也就是2.1到2.2步了
在这里插入图片描述
这步最后一句代码就调用UserDetailsService了 ,也就是2.3步了,最后一句返回的就是Authentication接口,上面代码是未标记状态,最后一句后就变成了标记状态了。 最后一句代码 AuthenticaitonManager也是个接口,有个牛逼实现类ProviderManager。
在这里插入图片描述
对2.3步进行解析了,也就是2.31步,因为是对第二大步既 2 的详细解析,2这步返回了Authentication接口。
在这里插入图片描述
2.32步,AuthenticaitonManager也是个接口,有个牛逼实现类ProviderManager。AuthenticationProvider provider 也是个接口,有非常多实现类,其中一个实现类DaoAuthenticationProvider 就是和UserDetailsService关联了。
在这里插入图片描述
2.32步的实现类
在这里插入图片描述

2、认证流程图的补充

在这里插入图片描述

3、授权流程源码分析

在这里插入图片描述
在这里插入图片描述

4、授权流程图补充

在这里插入图片描述

5、请求间共享认证信息(源码分析)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
源码分析
在这里插入图片描述
在这里插入图片描述

六、分布式

1、概念

在这里插入图片描述
肯定不用session,这玩意太耗费服务器性能
在这里插入图片描述
在这里插入图片描述
token是时代的宠儿
在这里插入图片描述
分布式最终架构图
在这里插入图片描述

2、OAuth2.0

OAuth2.0协议

3、github的OAuth2案例

登录github官网在到设置里面
在这里插入图片描述
在这里插入图片描述
第一次输入,要生成个秘钥
在这里插入图片描述
yml配置
在这里插入图片描述
pom的引入
在这里插入图片描述
注意 还不能用上面的Enable的注解 注意 截图错误 是 @Configuration 实际测试中,加上@Configuration也不行,都不加才可以,感觉就是没让security配置生效才管用。(测试证明,把整个security的配置干掉,都可以的。)
在这里插入图片描述
关键就是把这个配置出来
在这里插入图片描述
输入 http://localhost:8088/login后跳转到这个页面
在这里插入图片描述
点击github跳转到这边。登录以后跳转到报错页面,因为主要没有前端代码,所以404。 这个时候输入 新地址 hello等,就可以访问了。
在这里插入图片描述

  • 23
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝影铁哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值