spring cloud gateway整合security实现统一权鉴
方法,返回对象包含数据库查询出的用户账号和密码,然后和用户录入的账号密码比较验证。当登录成功后会把token返回给前端,后续的调用业务接口都会把token携带上进行。因为gateway框架使用的是netty的webflux技术,不是springmvc的servlet。上图的是否 2、3是我自定义的角色,在查询数据库用户账户密码时候,也查询了角色,并且一起封装到。security有两个版本,一个是s
0. 代办
- 若请求是需转发其他的服务,没问题。如果请求的就是本服务自己呢?我发现请求
/actutor/**
有问题会报错未授权(免密验证的请求)
1. 需求
- web项目后台框架spring cloud,前后端交互的接口调用统一由gateway组件进行路由。添加登录验证功能,控制访问权限。
2 . 实现,本文只提供代码,不看原理
网上大部分都是security servlet版本的,本版本是webflux版本 ,注意区分。在整合时候也有很多坑,建议看spring.io官网教程。本demo是简单的实现,供参考使用。末尾会附上项目源码
1. springcloud版本
<spring-boot.version>2.1.18.RELEASE</spring-boot.version>
<spring-cloud.version>Greenwich.SR6</spring-cloud.version>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-security</artifactId>
</dependency>
2. security为webflux版本
因为gateway框架使用的是netty的webflux技术,不是springmvc的servlet。
security有两个版本,一个是sevlet,一个是webflux
3. security配置代码
-
核心是配置
org.springframework.security.web.server.SecurityWebFilterChain
对象
-
用户登录时执行流程:security直接调用
findByUsername(String username)
方法,返回对象包含数据库查询出的用户账号和密码,然后和用户录入的账号密码比较验证。验证成功或失败都会调用上图的对应方法。当登录成功后会把token返回给前端,后续的调用业务接口都会把token携带上进行。
-
用户登录成功后携带token调用业务接口流程:security认证逻辑,调用
load(ServerWebExchange exchange)
方法验证
-
当验证完成账户密码成功后,进行权限验证,判断请求的路径是否有权限访问
上图的是否 2、3是我自定义的角色,在查询数据库用户账户密码时候,也查询了角色,并且一起封装到UserDetails
对象中
3. 项目源码gitee
https://gitee.com/shenshuxin01/ssx-java-idea/tree/gateway_security_demo/gateway-server
更多推荐
所有评论(0)