闲着无聊造个轮子,开源一个可快速接入的分布式SSO系统

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 最近突然有个想法想造点轮子,平常写的代码业务居多,因此想写点别的。于是就有了造轮子系列。登录认证应该是每个程序员写的第一个功能,至少对我来说是的,于是我的第一个造轮子项目也打算写登录认证,只不过换成了分布式统一认证项目。希望达到的效果是接入的项目可以通过简单的配置快速接入,不用再关注登录认证的事情。

听说微信搜索《Java鱼仔》会变更强哦!


本文收录于githubgitee ,里面有我完整的Java系列文章,学习或面试都可以看看哦


(一)概述


最近突然有个想法想造点轮子,平常写的代码业务居多,因此想写点别的。于是就有了造轮子系列。登录认证应该是每个程序员写的第一个功能,至少对我来说是的,于是我的第一个造轮子项目也打算写登录认证,只不过换成了分布式统一认证项目。希望达到的效果是接入的项目可以通过简单的配置快速接入,不用再关注登录认证的事情。


github地址:github.com/OliverLiy/f…


gitee地址:gitee.com/lyucoding/f…


maven:中仓仓库直接搜fast-sso


(二)演示效果


访问接入fast-sso的应用:localhost:8999/index ,因为未登录,自动跳转到统一认证服务的登录页


网络异常,图片无法展示
|


输入用户名密码后点击Sign in,自动跳回localhost:8999/index


网络异常,图片无法展示
|


另外一个也接入了fast-sso项目在同一个浏览器打开:localhost:9000/index,不需要登录直接进入系统:


网络异常,图片无法展示
|


(三)如何接入


项目包含fast-sso-server和fast-sso-client,fast-sso-server是统一认证服务中心,fast-sso-client给各个系统接入使用。因为目前未正式发版,因此采用源码编译的方式。首先下载源代码:github.com/OliverLiy/f…


配置统一认证中心


1、在数据库中建立sso用户信息表


CREATE DATABASE sso_user;
USE sso_user;
SET NAMES utf8mb4;
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `userId` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户Id',
  `username` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户名',
  `password` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '密码',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci;

2、在fast-sso-server中配置中修改sso.server.path为自己的sso应用路径

sso.server.path=http://localhost:8777

3、修改redis的地址和连接信息

redis.host = 10.10.128.226
redis.port = 6379
#最大空闲数
redis.maxidle = 10
#最大连接数
redis.maxtotal = 30
#如果redis没有设置密码则置为空
redis.password =

4、修改mysql的连接信息

spring.datasource.url=jdbc:mysql://10.10.128.226:3306/sso_user?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

配置每个接入的应用


1、引入依赖,目前最新为0.0.2

<dependency><artifactId>fast-sso-client</artifactId><groupId>io.github.oliverliy</groupId><version>{latest}</version></dependency>

2、配置sso地址、redis地址

sso.server.path = http://localhost:8777
redis.host = 10.10.128.226
redis.port = 6379
redis.maxidle = 10
redis.maxtotal = 30
redis.password =
#添加后下面的地址将不会走统一认证
exclude.url=/css/**,/actuator/**

3、配置一个拦截器

@ConfigurationpublicclassWebMvcConfigimplementsWebMvcConfigurer {
@AutowiredUserInterceptoruserInterceptor;
@OverridepublicvoidaddInterceptors(InterceptorRegistryregistry) {
registry.addInterceptor(userInterceptor)
                .addPathPatterns("/**");
    }
@BeanpublicUserInterceptoruserInterceptor(){
returnnewUserInterceptor();
    }
}

当前提供的可使用接口


获取当前登录用户信息:


sso-server地址/getUserInfo


登出:


sso-server地址/logout


(四)如何使用


如果本地跑,直接运行fast-sso-server即可,如果放到服务器,可以将项目打成jar包后运行。注意,当前实现方式基于cookie,因此统一认证中心和项目需要在同一个域名下。


fast-sso-server启动后,运行自己接入的项目即可。


(五)如何扩展


5.1 想增加用户信息怎么办?


目前的用户表中没有其他的字段信息,如果想要新增更多的用户信息,可新建一张用户详情表,与用户表中id作关联。mybatis的sql中做联表操作即可。


5.2 想垮域接入统一认证怎么办?


后续会引入token机制,不依赖cookie。


5.3 其他有问题怎么办?


可以在github或gitee直接提,或者联系本人。



相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
18天前
|
机器学习/深度学习 存储 运维
分布式机器学习系统:设计原理、优化策略与实践经验
本文详细探讨了分布式机器学习系统的发展现状与挑战,重点分析了数据并行、模型并行等核心训练范式,以及参数服务器、优化器等关键组件的设计与实现。文章还深入讨论了混合精度训练、梯度累积、ZeRO优化器等高级特性,旨在提供一套全面的技术解决方案,以应对超大规模模型训练中的计算、存储及通信挑战。
48 4
|
1月前
|
消息中间件 监控 数据可视化
Apache Airflow 开源最顶级的分布式工作流平台
Apache Airflow 是一个用于创作、调度和监控工作流的平台,通过将工作流定义为代码,实现更好的可维护性和协作性。Airflow 使用有向无环图(DAG)定义任务,支持动态生成、扩展和优雅的管道设计。其丰富的命令行工具和用户界面使得任务管理和监控更加便捷。适用于静态和缓慢变化的工作流,常用于数据处理。
Apache Airflow 开源最顶级的分布式工作流平台
|
1月前
|
存储 运维 负载均衡
构建高可用性GraphRAG系统:分布式部署与容错机制
【10月更文挑战第28天】作为一名数据科学家和系统架构师,我在构建和维护大规模分布式系统方面有着丰富的经验。最近,我负责了一个基于GraphRAG(Graph Retrieval-Augmented Generation)模型的项目,该模型用于构建一个高可用性的问答系统。在这个过程中,我深刻体会到分布式部署和容错机制的重要性。本文将详细介绍如何在生产环境中构建一个高可用性的GraphRAG系统,包括分布式部署方案、负载均衡、故障检测与恢复机制等方面的内容。
106 4
构建高可用性GraphRAG系统:分布式部署与容错机制
|
24天前
|
机器学习/深度学习 人工智能 分布式计算
【AI系统】分布式通信与 NVLink
进入大模型时代后,AI的核心转向大模型发展,训练这类模型需克服大量GPU资源及长时间的需求。面对单个GPU内存限制,跨多个GPU的分布式训练成为必要,这涉及到分布式通信和NVLink技术的应用。分布式通信允许多个节点协作完成任务,而NVLink则是一种高速、低延迟的通信技术,用于连接GPU或GPU与其它设备,以实现高性能计算。随着大模型的参数、数据规模扩大及算力需求增长,分布式并行策略,如数据并行和模型并行,变得至关重要。这些策略通过将模型或数据分割在多个GPU上处理,提高了训练效率。此外,NVLink和NVSwitch技术的持续演进,为GPU间的高效通信提供了更强的支持,推动了大模型训练的快
38 0
|
2月前
|
消息中间件 中间件 数据库
NServiceBus:打造企业级服务总线的利器——深度解析这一面向消息中间件如何革新分布式应用开发与提升系统可靠性
【10月更文挑战第9天】NServiceBus 是一个面向消息的中间件,专为构建分布式应用程序设计,特别适用于企业级服务总线(ESB)。它通过消息队列实现服务间的解耦,提高系统的可扩展性和容错性。在 .NET 生态中,NServiceBus 提供了强大的功能,支持多种传输方式如 RabbitMQ 和 Azure Service Bus。通过异步消息传递模式,各组件可以独立运作,即使某部分出现故障也不会影响整体系统。 示例代码展示了如何使用 NServiceBus 发送和接收消息,简化了系统的设计和维护。
61 3
|
2月前
|
消息中间件 存储 监控
消息队列系统中的确认机制在分布式系统中如何实现
消息队列系统中的确认机制在分布式系统中如何实现
|
2月前
|
消息中间件 存储 监控
【10月更文挑战第2天】消息队列系统中的确认机制在分布式系统中如何实现
【10月更文挑战第2天】消息队列系统中的确认机制在分布式系统中如何实现
|
2月前
|
存储 开发框架 .NET
C#语言如何搭建分布式文件存储系统
C#语言如何搭建分布式文件存储系统
86 2
|
2月前
|
消息中间件 存储 监控
消息队列系统中的确认机制在分布式系统中如何实现?
消息队列系统中的确认机制在分布式系统中如何实现?
|
2月前
|
存储 分布式计算 监控
C# 创建一个分布式文件存储系统需要怎么设计??
C# 创建一个分布式文件存储系统需要怎么设计??
42 0
下一篇
DataWorks