SSO单点登录系统DEMO

参考教程:https://www.cnblogs.com/ywlaker/p/6113927.html

代码:https://github.com/YounianC/sso-example

模块

  • a1 :测试项目Application1
  • ssoclient:sso客户端,用于宿主项目
  • ssoserver:sso服务端,即真正登录项目

部署:

  • a1 启动于tomcat 8081端口
  • a1 启动于tomcat 8082端口,模拟其他项目
  • ssoserver启动于tomcat 8080端口

集成sso-client

  • maven添加依赖
<dependency>
            <groupId>me.younian</groupId>
            <artifactId>sso-client</artifactId>
            <version>1.0-SNAPSHOT</version>
</dependency>
  • web.xml添加filter
<filter>
        <filter-name>authFilter</filter-name>
        <filter-class>me.younian.ssoclient.filter.AuthRequireFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>authFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
  • 添加配置文件:sso-config.properties
AuthInterfaceImplClass=me.younian.a1.auth.AuthImplRedis
ServerUrl=http://server.com:8080
LogoutUrl=/logout
ApplicaitonName=a1

hosts

添加hosts:

127.0.0.1 server.com
127.0.0.1 a1.com
127.0.0.1 a2.com

重要,访问一定要使用hosts,否则多个项目都在localhost下、使用localhost访问会出现sessionid混乱问题。

最终效果

  • 首次访问 a1.com:8081/index 会自动跳转到 http://server.com:8080/login?callback=http://a1.com:8081/index

  • 在登录页面输入用户名密码即可登录,成功会自动调回 a1.com:8081/index 并附带token

  • 再次访问 a1.com:8081/index 无需登录

  • 访问 a2.com:8082/index 会自动跳转并且调回,无需操作即可登录。

  • a1项目首次登陆 IMG20181218172238BIZVV7LTR6KAIRCKRZVNLT3SWUQ9IY.gif

  • a2项目无需登陆 IMG20181218172305HABYKOMAB5QHGVXI9X7YTKXCXIGIXG.gif

  • 访问a1注销链接:a1.com:8081/logout ,会相应注销其他子系统。 IMG20181219163053UMKET1UQX4RP14LCC34ZW8OAIP42BB.gif

可优化项目

  • 使用db存储token,不仅仅使用session,利于后期集群。
  • 尽量少的代码集成sso-client
  • 优化认证来源日志
  • 登出,需要通知所有项目全部登出。
  • 分离session硬编码,做成宿主项目可编码管理token和session

问题

在文章的第8步: image.png

这里的代码有点问题,作者原意是sso-client使用http请求sso-server的logout接口,sso-server收到请求后使session失效,但是:

  • 用户跳转到sso-server登录后会在sso-server保存响应的session信息,这个session是 关联到用户浏览器的
  • 但是在第8步使用http请求sso-server的logout,这个时候销毁的session是 相对于本次http请求的,用户浏览器的session依然没有销毁。
  • 所以需要在sso-server存储token和session的映射,调用logout时通过token销毁对应的session。

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×