spring cloud gateway整合security实现统一权鉴

0. 代办

  1. 若请求是需转发其他的服务,没问题。如果请求的就是本服务自己呢?我发现请求/actutor/**有问题会报错未授权(免密验证的请求)

1. 需求

  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配置代码

  1. 核心是配置org.springframework.security.web.server.SecurityWebFilterChain对象
    在这里插入图片描述

  2. 用户登录时执行流程:security直接调用findByUsername(String username)方法,返回对象包含数据库查询出的用户账号和密码,然后和用户录入的账号密码比较验证。验证成功或失败都会调用上图的对应方法。当登录成功后会把token返回给前端,后续的调用业务接口都会把token携带上进行。
    在这里插入图片描述

  3. 用户登录成功后携带token调用业务接口流程:security认证逻辑,调用load(ServerWebExchange exchange)方法验证
    在这里插入图片描述

  4. 当验证完成账户密码成功后,进行权限验证,判断请求的路径是否有权限访问
    在这里插入图片描述
    上图的是否 2、3是我自定义的角色,在查询数据库用户账户密码时候,也查询了角色,并且一起封装到UserDetails对象中
    在这里插入图片描述

3. 项目源码gitee

https://gitee.com/shenshuxin01/ssx-java-idea/tree/gateway_security_demo/gateway-server

在这里插入图片描述

  • 1
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring整合Spring Security是将Spring Security框架与Spring框架进行集成,实现身份验证和访问控制的功能。 Spring Security是一个功能强大且高度可定制的身份验证和访问控制框架,提供了完善的认证机制和方法级的授权功能。它的核心是一组过滤器链,不同的功能经由不同的过滤器来实现。通过将Spring Security整合Spring Boot项目中,可以实现在认证服务器上登录,获取Token,并访问资源服务器的资源。 要实现Spring整合Spring Security,首先需要创建一个Spring Boot项目,并在项目中引入Spring Security框架的依赖。然后,需要配置WebSecurityConfig类,继承WebSecurityConfigurerAdapter,并在该类中进行安全配置,如认证页面、认证成功页面、授权等。同时,在Spring Boot的初始化类中,需要加载WebSecurityConfig类和其他相关配置类。 通过以上步骤,就可以完成Spring整合Spring Security,并实现登录认证和资源访问的功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Spring整合SpringSecurity(一)](https://blog.csdn.net/qq_45297578/article/details/118998861)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [SpringBoot整合Spring Security【超详细教程】](https://blog.csdn.net/m0_52789121/article/details/125244210)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值