/actutor/**
有问题会报错未授权(免密验证的请求)网上大部分都是security servlet版本的,本版本是webflux版本 ,注意区分。在整合时候也有很多坑,建议看spring.io官网教程。本demo是简单的实现,供参考使用。末尾会附上项目源码
<spring-boot.version>2.1.18.RELEASEspring-boot.version>
<spring-cloud.version>Greenwich.SR6spring-cloud.version>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-dependenciesartifactId>
<version>${spring-boot.version}version>
<type>pomtype>
<scope>importscope>
dependency>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-dependenciesartifactId>
<version>${spring-cloud.version}version>
<type>pomtype>
<scope>importscope>
dependency>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-securityartifactId>
dependency>
因为gateway框架使用的是netty的webflux技术,不是springmvc的servlet。
security有两个版本,一个是sevlet,一个是webflux
核心是配置org.springframework.security.web.server.SecurityWebFilterChain
对象
用户登录时执行流程:security直接调用findByUsername(String username)
方法,返回对象包含数据库查询出的用户账号和密码,然后和用户录入的账号密码比较验证。验证成功或失败都会调用上图的对应方法。当登录成功后会把token返回给前端,后续的调用业务接口都会把token携带上进行。
用户登录成功后携带token调用业务接口流程:security认证逻辑,调用load(ServerWebExchange exchange)
方法验证
当验证完成账户密码成功后,进行权限验证,判断请求的路径是否有权限访问
上图的是否 2、3是我自定义的角色,在查询数据库用户账户密码时候,也查询了角色,并且一起封装到UserDetails
对象中
https://gitee.com/shenshuxin01/ssx-java-idea/tree/gateway_security_demo/gateway-server