SpringSecurity-spring security单点登录

在 Spring Boot 中实现 单点登录(SSO, Single Sign-On),通常使用 OAuth2 或 OIDC(OpenID Connect) 协议来完成。Spring Security 提供了对 OAuth2 和 OIDC 的完整支持,可以轻松集成如 Google、GitHub、Okta、Auth0、Keycloak 等第三方认证服务。


一、单点登录(SSO)简介

  • 用户只需登录一次,即可访问多个系统。
  • 常见实现方式:使用 OAuth2 + OIDC
  • Spring Security 提供了 spring-security-oauth2-client 模块支持 SSO。

二、开发步骤总览

步骤内容
1️⃣引入依赖(OAuth2 Client)
2️⃣配置 OAuth2 客户端信息(如 GitHub)
3️⃣配置安全策略(SecurityFilterChain)
4️⃣创建登录成功后的用户信息接口
5️⃣启动项目并测试 SSO 登录流程

三、具体代码实现

1️⃣ 引入依赖(pom.xml

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId>
</dependency><dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-oauth2-client</artifactId>
</dependency>

2️⃣ 配置 OAuth2 客户端信息(application.yml

以 GitHub 为例,配置 OAuth2 客户端信息:

spring:security:oauth2:client:registration:github:client-id: your-github-client-idclient-secret: your-github-client-secretscope: read:user,user:emailauthorization-grant-type: authorization_coderedirect-uri: "{baseUrl}/login/oauth2/code/{registrationId}"client-name: GitHub

你需要先在 GitHub 创建 OAuth App,获取 client-idclient-secret

  • GitHub 地址:https://github.com/settings/applications/new

3️⃣ 配置安全策略(SecurityFilterChain)

@Configuration
@EnableWebSecurity
public class SecurityConfig {@Beanpublic SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {http.authorizeHttpRequests(auth -> auth.anyRequest().authenticated()).oauth2Login(withDefaults()); // 启用 OAuth2 登录return http.build();}
}
  • oauth2Login():启用 OAuth2 登录流程。
  • 默认会跳转到 GitHub 的登录页面。
  • 登录成功后会跳转到 /login/oauth2/code/github

4️⃣ 创建登录成功后的用户信息接口

@RestController
public class UserController {@GetMapping("/user")public Principal user(Principal principal) {return principal;}@GetMapping("/login")public String login() {return "Redirecting to OAuth2 login...";}
}
  • /user 接口返回当前登录用户信息(来自 GitHub)。
  • Principal 包含了用户的基本信息(如用户名、头像、邮箱等)。

四、运行流程说明

用户访问应用 → 未登录 → 跳转到 GitHub 登录页↓
用户输入 GitHub 账号密码 → GitHub 认证 → 授权回调到你的应用↓
应用获取用户信息 → 登录成功 → 跳转到首页↓
后续请求自动携带 OAuth2 Token → 访问受保护资源

五、扩展:自定义登录成功处理逻辑

你可以自定义登录成功后的跳转逻辑:

@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {http.authorizeHttpRequests(auth -> auth.anyRequest().authenticated()).oauth2Login(oauth2 -> oauth2.successHandler((request, response, authentication) -> {System.out.println("登录成功:" + authentication.getName());response.sendRedirect("/user");}));return http.build();
}

六、其他 OAuth2 提供商支持

提供商配置名示例
GitHubgithub如上
Googlegoogleclient-id, client-secret
Oktaokta需配置 issuer-uri
Keycloak自定义 OIDC使用 spring.security.oauth2.client.provider 配置

七、总结:Spring Boot + Spring Security 实现 SSO 的关键点

步骤说明
引入依赖spring-security-oauth2-client
配置客户端application.yml 中配置第三方 OAuth2 信息
启用 OAuth2 登录使用 .oauth2Login()
获取用户信息通过 Principal 获取
自定义逻辑可通过 successHandler 自定义登录成功行为
支持平台GitHub、Google、Okta、Keycloak 等

八、完整流程图

引入依赖↓
配置 OAuth2 客户端(GitHub)↓
启用 oauth2Login()↓
用户访问受保护资源 → 跳转 GitHub 登录↓
GitHub 登录成功 → 回调到 /login/oauth2/code↓
获取用户信息 → 登录成功↓
访问 /user 获取用户信息

通过以上步骤,可以轻松在 Spring Boot 项目中实现 基于 OAuth2 的单点登录(SSO),适用于各种第三方认证平台。这种方式不仅安全,而且易于集成到微服务架构中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/89463.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/89463.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《前端基础核心知识笔记:HTML、CSS、JavaScript 及 BOM/DOM》

html 前端三剑客的介绍&#xff1a; HTML:页面内容的载体 Css&#xff1a;用来美化和指定页面的显示效果 JavaScript&#xff1a;页面显示的过程中&#xff0c;可以动态改变页面的内容 重点属性 type"text"文本输入 type"password"密码输入 <a…

基于vue.js的客户关系管理系统(crm)的设计与实现(源码+论文)

相关技术 SSM框架介绍 开发环境&#xff1a; 技术&#xff1a;SSM框架&#xff08;Spring Spring MVC MyBatis&#xff09; 描述&#xff1a; SSM框架是Java Web开发中广泛使用的流行框架之一。Spring&#xff1a;提供全面的基础设施支持&#xff0c;管理应用对象&#…

AWS权限异常实时告警系统完整实现指南

概述 本文将详细介绍如何构建一个基于CloudTrail → S3 → Lambda → SNS → Webhook/Email架构的AWS权限异常实时告警系统。该系统能够实时监控AWS环境中的权限异常事件,并通过多种方式发送告警通知,帮助企业及时发现和响应安全威胁。 系统架构 ┌───────────…

NIO网络通信基础

文章目录概述一、Socket二、NIO三大组件与事件三、Reactor模式四、NIO通信案例4.1、服务端4.2、客户端本文为个人学习笔记整理&#xff0c;仅供交流参考&#xff0c;非专业教学资料&#xff0c;内容请自行甄别 概述 前篇中提到&#xff0c;BIO是阻塞的IO&#xff0c;阻塞体现在…

Redis4缓存穿透:布隆过滤器与空对象方案

缓存穿透缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在&#xff0c;这样缓存永远不会生效&#xff0c;这些请求都会达到数据库。1)方案1&#xff1a;缓存空对象在缓存中存储一个空值每次读取这个空优点&#xff1a;实现简单&#xff0c;维护方便缺点&#xff1a;造成…

域名WHOIS信息查询免费API使用指南

本文介绍由接口盒子提供的免费域名WHOIS查询API服务&#xff0c;帮助开发者快速获取域名的注册信息、到期时间、DNS服务器等关键数据。 一、接口基本信息 ​功能说明​&#xff1a;查询顶级域名的WHOIS信息&#xff08;不支持国别域名/中文域名&#xff09;​请求地址​&#…

【18位数据次方提高数据输出速度】2022-3-9

实在是无法忍受W10输出数据那么慢W7需要2分钟输出数据W10则需要10分钟完成W7需要3分钟W10则需要15分钟完成输出数据&#xff0c;虽然W10运算速度比W7快很多但是加上输出速度总体完成时间居然差不多&#xff01;随着使用数组超过百万W7数据输出时间也变长&#xff0c;随着数组数…

云原生技术与应用-Kubernetes架构原理与集群环境部署

目录 一.为什么需要kubernetes 1.对于开发人员 2.对于运维人员 二.kubernetes带来的挑战 三.kubernetes架构解析 1.master节点的组件 2.node节点包含的组件 3.kubernetes网络插件 四.kubernetes快速安装kubernetes集群 1.部署docker环境 2.部署kubernetes集群 五.Metrics-…

百度权重提升技巧分析:从底层逻辑到实战策略

在搜索引擎优化&#xff08;SEO&#xff09;领域&#xff0c;百度权重始终是网站运营者关注的核心指标之一。它不仅反映了网站在百度搜索中的综合表现&#xff0c;更直接影响着流量获取能力与商业价值。然而&#xff0c;百度权重并非百度官方直接公布的数据&#xff0c;而是第三…

模拟数据生成---使用NGS数据模拟软件VarBen

目录 1.在BAM文件中根据指定的变异等位基因分数的指定位置或区域随机选择read。 2.筛选变异等位基因分数的reads: 3.装BWA和samtools软件包(samtools在linux系统中下载过,前文有讲过) 4.写py脚本 5.下载pysam库模块 6.下载参考基因组hg38 7.解压gz 8.建立samtools索引…

Redis-典型应用-分布式锁

目录 1.什么是分布式锁? 2.分布式锁的实现 3.引入过期时间 4.引入校验ID 5.引入lua脚本: 6.引入看门狗(watch dog) 7.引入redislock算法: 1.什么是分布式锁? 在 分布式系统中,会出现多个节点同时访问同一个公共资源, 此时就需要通过锁来作互斥控制,避免出现类似于多线程…

Dinky (Mac) 本地开发环境搭建指南

目录 一、前置条件 二、代码准备 三、前端环境搭建 1. 安装Node环境 2. 安装PNPM 3. 构建前端 四、后端环境搭建 1. 本地编译依赖 2. 添加必要依赖 3. 启动后端服务 五、访问系统 附录&#xff1a;官方参考 一、前置条件 确保已安装以下软件&#xff1a; 软件要求…

Java Set 集合详解:从基础语法到实战应用,彻底掌握去重与唯一性集合

作为一名 Java 开发工程师&#xff0c;你一定在实际开发中遇到过需要去重、唯一性校验、快速查找等场景。这时候&#xff0c;Set 集合 就成为你不可或缺的工具。本文将带你全面掌握&#xff1a;Set 接口的定义与核心方法常见实现类&#xff08;如 HashSet、TreeSet、LinkedHash…

在分布式系统中,如何保证缓存与数据库的数据一致性?

口诀&#xff1a; 读多写少用旁路&#xff0c;先更库再删缓存&#xff1b; 强一致选写透&#xff0c;缓存代理更库走&#xff1b; 性能优先用写回&#xff0c;异步批量有风险&#xff1b; 高并发加双删&#xff0c;延迟兜底防旧残&#xff1b; 强一致用锁串&#xff0c;并发虽低…

【洛谷P1417】烹调方案 题解

题目大意 一共有 nnn 件食材&#xff0c;每件食材有三个属性&#xff0c;aia_iai​&#xff0c;bib_ibi​ 和 cic_ici​&#xff0c;如果在 ttt 时刻完成第 iii 样食材则得到 ai−tbia_i-t\times b_iai​−tbi​ 的美味指数&#xff0c;用第 iii 件食材做饭要花去 cic_ici​ 的…

vue svg实现一个环形进度条组件

svg实现一个环形进度条设计初衷&#xff1a;本来想直接使用element的进度条组件的&#xff0c;但是好多属性都没有办法控制。 UI设计的图如下&#xff0c;需要控制未完成和已完成的颜色&#xff0c;端点的形状改为普通的butt 所以使用svg实现了一个环形进度条组件element组件设…

02 51单片机之LED闪烁

文章目录1、单片机1-1、简介1-2、应用场景2、51单片机2-1、背景2-2、主要品牌及其产品2-3、基本组成2-4、命名规则3、单片机内部结构3-1、单片机内部结构图3-2、单片机内部结构3-3、单片机内部管脚图3-4、单片机最小系统3-5、开发板介绍4、点亮LED4-1、新建工程4-1-1、创建工程…

Typecho博客集成算术验证码防御垃圾评论实战指南

文章目录 Typecho实现算术验证码防御机器人垃圾评论的完整方案 背景与问题分析 技术方案设计 系统架构 技术选型 核心实现步骤 1. 创建验证码生成函数 2. 修改评论表单模板 3. 添加AJAX刷新功能 4. 创建验证码刷新接口 5. 添加评论提交验证 安全增强措施 1. 防止暴力破解 2. 增…

clonezilla 导出自动化恢复iso

clonezilla 下载及U盘工具下载 clonezilla rufus U盘写入工具ventoy U盘工具downloaddownloaddownload clonezilla 备份&#xff0c;连贯上一篇文章参考 Choose Clonezilla live (VGA 800x600) Wait for it to complete Language selection Keyboard Settings Select Mode …

深度学习模型开发部署全流程:以YOLOv11目标检测任务为例

深度学习模型开发部署全流程&#xff1a;以YOLOv11目标检测任务为例 深度学习模型从开发到部署的完整流程包含需求分析、数据准备、模型训练、模型优化、模型测试和部署运行六大核心环节。YOLOv11作为新一代目标检测模型&#xff0c;不仅延续了YOLO系列的高效实时性能&#xff…