3 个注解,优雅的实现微服务鉴权(一)

love374
发布于 2022-7-12 17:07
浏览
0收藏

 

大家好,我是不才陈某~

 

这是《Spring Cloud 进阶》第39篇文章,前面的文章中介绍了网关集成Spring Security实现网关层面的统一的认证鉴权。

 

有不清楚的可以看之前的文章:实战干货!Spring Cloud Gateway 整合 OAuth2.0 实现分布式统一认证授权!

 

最近订阅了《Spring Cloud Alibaba 实战》视频专栏的读者经常问陈某两个问题,如下:

  1. 鉴权放在各个微服务中如何做?
  2. feign的调用如何做到的鉴权?

 

今天针对以上两个问题深入聊聊如何通过三个注解解决。

题外话:陈某后期会在B站、公众号中分享一些视频教程,毕竟文章看的生涩难懂。

B站链接:https://b23.tv/wdfX4E6

 

“帅气的人都点赞了~

 

实现思路
前面的几篇文章陈某都是将鉴权和认证统一的放在了网关层面,架构如下:

 3 个注解,优雅的实现微服务鉴权(一)-鸿蒙开发者社区
微服务中的鉴权还有另外一种思路:将鉴权交给下游的各个微服务,网关层面只做路由转发。

 

这种思路其实实现起来也是很简单,下面针对网关层面鉴权的代码改造一下即可完成:实战干货!Spring Cloud Gateway 整合 OAuth2.0 实现分布式统一认证授权!

 

1. 干掉鉴权管理器
在网关统一鉴权实际是依赖的鉴权管理器ReactiveAuthorizationManager,所有的请求都需要经过鉴权管理器的去对登录用户的权限进行鉴权。

 

这个鉴权管理器在网关鉴权的文章中也有介绍,在陈某的《Spring Cloud Alibaba 实战》中配置拦截也很简单,如下:

 3 个注解,优雅的实现微服务鉴权(一)-鸿蒙开发者社区
除了配置的白名单,其他的请求一律都要被网关的鉴权管理器拦截鉴权,只有鉴权通过才能放行路由转发给下游服务。

 

看到这里思路是不是很清楚了,想要将鉴权交给下游服务,只需要在网关层面直接放行,不走鉴权管理器,代码如下:

http
 ....
 //白名单直接放行
  .pathMatchers(ArrayUtil.toArray(whiteUrls.getUrls(), String.class)).permitAll()
 //其他的任何请求直接放行
  .anyExchange().permitAll()
  .....

 

文章转自公众号:码猿技术专栏

标签
已于2022-7-12 17:07:01修改
收藏
回复
举报
回复
    相关推荐