sso-单点登录

news/2024/10/1 21:39:06

单点登录

项目组成

基于spring-boot-2.1.8.RELEASE,使用redis完成完成 session记录。

  • sso-base
  • sso-server
  • sso-client1
  • sso-client2

    sso-base

  • TokenFilter: 拦截获取是否登录,并获取登录用户设置到线程变量中
  • TokenUtil:从redis获取指定key判断是否登录,以及登录用户;写入sessionId和sessionIdKey
  • ClientTokenProperties: client需要的配置项
    1. serverLoginUrl, server登录url
    2. login请求的username 和 password,用于向server端登录
    3. redisAddr, 读取sessionId和sessionIdKey,userPOValue
  • ServerTokenProperties:server需要的配置项
    1. redisAddr, 写入sessionId和sessionIdKey,userPOValue
    2. expiredSeconds, 过期时间
  • SSOConfig,加入需要的bean
    1. RedisProperties,使用自定义的redis配置项,完成 RedisProperties配置
    2. RedisTemplate,提供模板方法

    sso-client1

  • ClientFilterConfig, 配置FilterRegistrationBean,使用TokenFilter拦截所有请求
  • ClientController, web接口

    配置项:

    server.port=1001cn.cxd.sso.client.redisAddr=localhost:6379
    cn.cxd.sso.client.serverLoginUrl=http://localhost:1000/server/login
    cn.cxd.sso.client.login.username=root
    cn.cxd.sso.client.login.password=root
    

    sso-client2

    同 sso-client1

    server.port=1002cn.cxd.sso.client.redisAddr=localhost:6379
    cn.cxd.sso.client.serverLoginUrl=http://localhost:1000/server/login
    cn.cxd.sso.client.login.username=root
    cn.cxd.sso.client.login.password=root
    

    sso-server

  • LoginController, 登录接口,生成sessonId,使用TokenUtil,写入sessionId和sessionIdKey
    cn.cxd.sso.server.expiredSeconds=1000
    cn.cxd.sso.server.redisAddr=localhost:6379
    server.port=1000
    

    整体效果

  • server登录后,client1,client2 都能在正确访问各自的web接口
  • client1/client2登录后,两个client都能正确访问各自的web接口
  • client1/client2登录后,server再登录,client1/client2 都可以正确访问各自的web接口

    api

    server

  • http://localhost:1000/server/login
  • POST
  • {"userName" : "root11","password" : "root11" }

    client1

  • http://localhost:1001/client1/mydata
  • GET

    client2

  • http://localhost:1002/client2/mydata
  • GET

    访问时序图


    架构图

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

    如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

    相关文章

    Vue入门到关门之Vue2高级用法

    一、在vue项目中使用ref属性 ref 属性是 Vue.js 中用于获取对 DOM 元素或组件实例的引用的属性。通过在普通标签上或组件上添加 ref 属性,我们可以在 JavaScript 代码中使用 this.$refs.xxx 来访问对应的 DOM 元素或组件实例。放在普通标签上,通过 this.$refs.名字---》取到的…

    Vue入门到关门之Vue3项目创建

    一、vue3介绍 1、为什么要学习vue3? vue3的变化: 首先vue3完全兼容vue2,但是vue3不建议用vue2的写法;其次,vue3拥抱TypeScript,之前vue2使用的JavaScript,ts完全兼容js 最后之前学的vue2 是配置项api,而vue3是组合式api optionsAPI(旧) => compositionAPI(新), 效…

    文件IO常用的函数接口

    本文归纳整理了常用的文件IO常见的函数接口及其用法,以供读者查阅 目录打开文件fopen关闭文件fclose数据读取字符读取:fgetc、getc、getchar按行读取:fgets、gets按块读取:fread写入文件字符写入:fputc、putc、putchar按行写入:fputs、puts按块写入:fwrite文件位置(光标位…

    python教程6.6-发送邮件smtplib

    实现步骤: Python对SMTP⽀持有 smtplib 和 email 两个模块, email 负责构造邮件, smtplib 负责发送邮件,它对smtp协议进⾏了简单的封装。 简单代码示例:发送html格式的邮件:在html中插入图片:

    PCI-Express-Technology(二)

    第一代 PCIe(称为 Gen1 或者 PCIe 协议规范版本 1.x)中,比特率为 2.5GT/s,将它除以 10 即可得知一个通道的速率将可以达到 0.25GB/s。因为链路可以在同一时刻进行发送和接收,因此聚合带宽可以达到这个数值的两倍,即每个通道达到 0.5GB/s。第二代 PCIe(称为 Gen2 或者 PC…

    继承介绍、经典类和新式类、继承和抽象、封装和派生、组合

    【一】继承介绍继承是一种创建新类的方式,新建的类可以继承一个或多个父类(python支持多继承),父类又可称为基类或超类,新建的类称为派生类或子类。子类会“遗传”父类的属性,从而解决代码重用问题(去掉冗余的代码)继承:单继承:继承一个父类的子类 多继承:继承多个父…

    CH57x/CH58X/CH59X/CH32F/V208OTA使用说明

    目前提供了两种OTA升级方式, 方式一:带库升级;每次升级可以带着库一起进行升级(带库升级适用于flash较大的芯片) 方式二:固定库升级;升级时库不会随着升级而升级(适用于flash不够用时) 方式一: 升级时需要同时烧录这三个固件:(可以使用isp工具同时烧录也可以使用合并…