当前位置: 首页 > news >正文

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

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

(一)概述

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

github地址:http://github.com/OliverLiy/fast-sso

gitee地址:https://gitee.com/lyucoding/fast-sso

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给各个系统接入使用。因为目前未正式发版,因此采用源码编译的方式。首先下载源代码:https://github.com/OliverLiy/fast-sso或https://gitee.com/lyucoding/fast-sso

配置统一认证中心

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、配置一个拦截器

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
    @Autowired
    UserInterceptor userInterceptor;
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(userInterceptor)
                .addPathPatterns("/**");
    }
    @Bean
    public UserInterceptor userInterceptor(){
        return new UserInterceptor();
    }
}

当前提供的可使用接口

获取当前登录用户信息:

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直接提,或者联系本人。

相关文章:

  • https在电子邮件安全解决方案
  • Python生成10个0-100之间的随机数,将其每个数一行写入“随机数.txt”文件,然后从文件中读出十个数,排序后写入“排序.txt”文件。文件路径随意指定。
  • 手游出海必用的三大推广策略
  • Python 实现批量文件改名操作。比如某路径下有“01.txt”“02.txt”“03,txt”,将其统一改为“学生01.txt”“学生02.txt”“学生03.txt”的形式。
  • NodeJs 搭建简单的聊天室
  • SolrCloud 5.x 集群部署方法
  • Spring Boot 和Spring Data
  • centos7使用docker下安装mysql并配置
  • 数组 找出重复的数字(不修改数组)
  • 加入强调语气,使用strong和em标签
  • java内置了优先队列PriorityQueue
  • Hadoop和分布式系统
  • c++ 指向类成员函数的函数指针
  • 数组流中的中位数
  • Java——观察者模式实例
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • 345-反转字符串中的元音字母
  • 5、React组件事件详解
  • es6要点
  • pdf文件如何在线转换为jpg图片
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • V4L2视频输入框架概述
  • Vultr 教程目录
  • Xmanager 远程桌面 CentOS 7
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 扑朔迷离的属性和特性【彻底弄清】
  • 什么是Javascript函数节流?
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 06-01 点餐小程序前台界面搭建
  • 7行Python代码的人脸识别
  • 如何在招聘中考核.NET架构师
  • ​Linux·i2c驱动架构​
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • $(function(){})与(function($){....})(jQuery)的区别
  • (09)Hive——CTE 公共表达式
  • (14)Hive调优——合并小文件
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (六)激光线扫描-三维重建
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (排序详解之 堆排序)
  • (学习日记)2024.01.09
  • (一)u-boot-nand.bin的下载
  • (原創) 系統分析和系統設計有什麼差別? (OO)
  • (轉貼) 蒼井そら挑戰筋肉擂台 (Misc)
  • .axf 转化 .bin文件 的方法
  • .form文件_一篇文章学会文件上传
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .NET DevOps 接入指南 | 1. GitLab 安装
  • .Net IE10 _doPostBack 未定义
  • .net mvc actionresult 返回字符串_.NET架构师知识普及
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .NET Remoting Basic(10)-创建不同宿主的客户端与服务器端
  • .NET 同步与异步 之 原子操作和自旋锁(Interlocked、SpinLock)(九)
  • .NET/C# 使用 SpanT 为字符串处理提升性能