Spring Cloud Gateway 整合 OAuth2.0 实现分布式统一认证授权③
3、认证管理器自定义
新建一个JwtAuthenticationManager,需要实现ReactiveAuthenticationManager这个接口。
认证管理的作用就是获取传递过来的令牌,对其进行解析、验签、过期时间判定。
详细代码如下:
逻辑很简单,就是通过JWT令牌服务解析客户端传递的令牌,并对其进行校验,比如上传三处校验失败,抛出令牌无效的异常。
抛出的异常如何处理?如何定制返回的结果?
这里抛出的异常可以通过Spring Cloud Gateway的全局异常进行捕获,这个内容在Spring Cloud Gateway夺命连环10问?这篇文章有详细介绍。下面只贴出关键代码,如下:
4、鉴权管理器自定义
经过认证管理器JwtAuthenticationManager认证成功后,就需要对令牌进行鉴权,如果该令牌无访问资源的权限,则不允通过。
新建JwtAccessManager,实现ReactiveAuthorizationManager,代码如下:
这里的逻辑很简单,就是取出令牌中的权限和当前请求资源URI的权限对比,如果有交集则通过。
①处的代码什么意思?
这里是直接从Redis中取出资源URI对应的权限集合,因此实际开发中需要维护资源URI和权限的对应关系,这里不细说,为了演示,陈某直接在项目启动的时候向Redis中添加了两个资源的权限,代码如下:
“注意:实际开发中需要维护资源URI和权限的对应关系。”
②处的代码什么意思?
这处代码就是取出令牌中的权限集合
③处的代码什么意思?
这处代码就是比较两者权限了,有交集,则放行。
5、令牌无效或者过期时定制结果
在第4步,如果令牌失效或者过期,则会直接返回,这里需要定制提示信息。
新建一个RequestAuthenticationEntryPoint,实现ServerAuthenticationEntryPoint,代码如下:
6、无权限时定制结果
在第4步鉴权的过程中,如果无该权限,也是会直接返回,这里也需要定制提示信息。
新建一个RequestAccessDeniedHandler,实现ServerAccessDeniedHandler,代码如下:
文章转自公众号:码猿技术专栏
-
一 口气说出java中 OAuth2.0 的四种 授权 方式lingyuli • 1.6w浏览 • 0回复
-
#星光计划 2.0 #HarmonyOS 分布式 应用框架深入解读软通动力HOS • 1.5w浏览 • 7回复
-
「SpringCloud」 Gateway + OAuth 2+JWT 统一 认证 授权ponymar • 1.4w浏览 • 0回复
-
Spring Cloud Gateway 集成 RBAC 权限模型 实现 动态权限控制( 一 )love374 • 8194浏览 • 0回复
-
Spring Cloud Gateway 整合 OAuth2.0 实现 分布式 统一 认证 授权 ①love374 • 7310浏览 • 0回复
-
Spring Cloud Gateway 整合 OAuth2.0 实现 分布式 统一 认证 授权 ②love374 • 6055浏览 • 0回复
-
Spring Cloud Gateway 整合 OAuth2.0 实现 分布式 统一 认证 授权 ④love374 • 7372浏览 • 0回复
-
Spring Cloud Gateway 整合 OAuth2.0 实现 分布式 统一 认证 授权 ⑤love374 • 7428浏览 • 0回复
-
OAuth2.0 实战!玩转 认证 、资源服务异常自定义这些骚操作!( 一 )love374 • 5287浏览 • 0回复
-
几行代码搞定 Spring Cloud OAuth 2 授权 码模式3个页面定制xawind • 6384浏览 • 0回复
-
SpringCloud系列— Spring Cloud Gateway 网关老老老JR老北 • 1.0w浏览 • 0回复
-
SpringCloud系列— Spring Cloud 实战之 统一 认证 与 授权老老老JR老北 • 8320浏览 • 1回复
-
SpringCloud系列— Spring Cloud 开放 认证 Oauth2.0 应用老老老JR老北 • 7763浏览 • 0回复
-
没错,用三方 Github 做 授权 登录就是这么简单!( OAuth2.0 实战)heatdog • 5002浏览 • 0回复
-
SpringBoot 整合 Redis 实现 分布式 缓存、 分布式 锁等,实战分享!skyyoung • 5268浏览 • 0回复
-
几行代码搞定 Spring Cloud OAuth 2 授权 码模式3个页面定制lhlrj • 3360浏览 • 0回复
-
放弃FastDFS, Spring Boot 整合 MinIO 实现 分布式 文件服务,真香Handpc • 4339浏览 • 0回复
-
Oauth2.0 实现 单点登录的原理流程,这次总该懂了!lhlrj • 4795浏览 • 0回复
-
Spring Cloud Gateway + Nacos 实现 服务上下线无缝切换梦叶草789 • 4690浏览 • 0回复