一、基本思路
單點sso用於多系統分布式,當多個系統分布式部署后,當然需要統一的登錄接口。sso應運而生。
可以想見,單點應該是提供一個服務給其他系統,當其他系統需要驗證登錄狀態的時候,調用服務,就可以確定用戶的信息權限的狀態。
1、首要要定義一個接口用於每個系統,方便接收數據。
2、應該遵循流程:
登錄-》查數據庫 -》用戶存在 -》生成唯一token -》將用戶信息和token存入redis緩存存入cookie -》將用戶信息打包成接口返回值 -》返回首頁,或相應頁面。
-》用戶不存在 -》提示重新登錄。
3、需要寫的類:
1、一個接口返回值類: 應包含status狀態,msg返回消息,data可能用到的數據。
2、cookieUtil包: cookie的常用方法。
3、jsonUtil包: json常用方法。
4、serializeUtil: 序列化對象。
5、Controller: 起碼包含 login方法,logout方法,checkName檢查用戶名是否可用(供ajax調用)方法,getUserByToken方法(供其他系統調用檢查登錄狀態)。
6、service: 對應需求的業務實現方法。
7、Dao: login檢查用戶方法,checkName檢查用戶名是否可用。其他方法都用mybatis generate自動生成吧,很省事。
8、model: 自動生成。
4、大概的思路是這樣,實際需求比較簡單,沒有難點,這里我大概說一下thymeleaf模板。
當部署到tomcat以后訪問地址會發生變化,在myeclipse中是http://ip:port/的方式,部署后會成為http://ip:port/項目名的方式。
為了部署和調試的環境一樣,方便部署,要在application.properties中添加一句“server.context-path=/sso/”,
將來打包發布后生成sso.war包部署到tomcat的webapps中,就不會有問題了。
這樣添加后,thymeleaf模板的頁面訪問地址要加上
/*<![CDATA[*/ var url = /*[[@{/user/check}]]*/"/user/check"; /*]]>*/
<img th:src="@{/images/loginbanner.png}" />
這樣來獲得地址的上下文。