sso-单点登录

单点登录

项目组成

基于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=1001
    
    cn.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=1002
    
    cn.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

    访问时序图


    架构图

  • posted @ 2024-05-09 21:05  林致礼  阅读(46)  评论(0)    收藏  举报