【SSO】單點登入 & Session共享
單點登入
背景:
Tomcat叢集可能因為兩次訪問的Session不一致導致登入失敗,無法訪問後續頁面;
解決可以通過tomcat互相進行Session共享實現,但是這僅僅試用於小叢集;
如果叢集變大,就會有大量Session進行互相共享,負載很大;
SSO
SSO英文全稱Single Sign On,單點登入。SSO是在多個應用系統中,使用者只需要登入一次就可以訪問所有相互信任的應用系統。
通過在Redis集中管理使用者的Session,其它服務的工程都為無狀態的Tomcat,這樣實現的單點登入,叢集的大小就不會受到限制。
登入業務
- 校驗表單資訊;
- 生成UUID作為token傳送給Redis;
- Session存入Redis,key為token,使用者資訊為value,設定過期時間;
- 返回token存入客戶端Cookie;
SSO系統使用流程
查詢訂單(token過期)
- 從Cookie中獲取token查詢redis;
- redis返回不存在,頁面跳轉到登入頁;
查詢訂單(token未過期)
- 從Cookie中獲取token查詢redis;
- redis存在token,重置該token過期時間;
- 返回使用者登入資訊,顯示訂單資訊;
jsonp解決跨域問題
跨域請求:如果 域名不同 或者 埠不同,瀏覽器視作跨域,不允許請求資料
原理
- 定義mycall方法;
- 通過js跨域載入檔案,引數為callback=mycall;
- 伺服器識別callback,把json資料拼接為mycall({json data})變成js語句;
- 瀏覽器接收到返回資料後會直接執行js語句,從而呼叫mycall方法;
使用
- 客戶端修改ajax的datatype:
datatype:"jsonp"
- 服務端修改controller:增加引數callback
@RequestMapping(value="/user/token/{token}")
@ResponseBody
public Object getUserByToken(@PathVariable String token, String callback) {
Result result = tokenService.getUserByToken(token);
//響應結果之前,判斷是否為jsonp請求
if (StringUtils.isNotBlank(callback)) {
//把結果封裝成一個js語句響應
MappingJacksonValue mappingJacksonValue = new MappingJacksonValue(result);
mappingJacksonValue.setJsonpFunction(callback);
return mappingJacksonValue;
}
return result;
}
相關推薦
【SSO】單點登入 & Session共享
單點登入 背景: Tomcat叢集可能因為兩次訪問的Session不一致導致登入失敗,無法訪問後續頁面; 解決可以通過tomcat互相進行Session共享實現,但是這僅僅試用於小叢集; 如果叢集變大,就會有大量Session進行互相共享,負載很大;
【SSO】單點登入系統
一、單點登入系統介紹 對於一個開發專案來說,每個專案都必不可少要有登入的這個功能。但是隨著專案的變大,變大,再變大。系統可能會被拆分成多個小系統,咱們就拿支付寶和淘寶來說,咱們在淘寶上購物,然後就可以直接連線到自己的支付寶,這個過程不需要我們再次登入系統,自動就完成了跳轉。這個操作就是小編這次向大家介紹
【SSO】單點登入
應用場景: 一個企業中有不同的應用,員工只需登入一次,可以同步登入狀態到其他服務(即訪問別的應用就不用"登入") **實際例子:** 在同一個瀏覽器下,登入新浪部落格後,再去訪問新浪微博,則會發現賬號已登入。 SSO 技術簡介 涉及技術: C
【SSO】單點登入系統介紹
一、前言 對於一個開發專案來說,每個專案都必不可少要有登入的這個功能。但是隨著專案的變大,變大,再變大。系統可能會被拆分成多個小系統,咱們就拿支付寶和淘寶來說,咱們在淘寶上購物,然後就可以直接連線到自己的支付寶,這個過程不需要我們再次登入系統,自動就完成了跳轉。這個
【Java】單點登入
【單點登入】 單點登入SSO(Single Sign On)。SSO是在多個應用系統中,使用者只需要登入一次就可以訪問所有相互信任的應用系統。它包括可以將這次主要的登入對映到其他應用中用於同一個使用者的登入的機制。 畫了一張圖,大概描述下單點登入的過程
(五)SSO之CAS框架單點登入, session超時, ajax連結處理
1 錯誤場景 部署問題:用nginx封裝,service攜帶不過來。 2 cas 針對session超時設定 cas對於session超時設定,可以設定檔案cas\WEB
SSO CAS單點登入搭建詳細步驟及原始碼
1.因為是本地模擬sso環境,而sso的環境測試需要域名,所以需要虛擬幾個域名出來,步驟如下: 2.進入目錄C:\Windows\System32\drivers\etc 3.修改hosts檔案 127.0.0.1 jeesz.cn 127.0.0.1 sso1.
SSO CAS單點登入框架學習 搭建詳細步驟及原始碼
1.瞭解單點登入 SSO 主要特點是: SSO 應用之間使用 Web 協議(如 HTTPS) ,並且只有一個登入入口. SSO 的體系中有下面三種角色: 1) User(多個) 2) Web 應用(多個) 3) SSO 認證中心(一個) 2.SSO 實現包
weblogic單點登入session問題,伺服器之間的重定向!
在找東西時偶然看到的覺得很有趣就粘過來了,也許以後用得著! 刪除了論壇中一些回覆,或許應該改個名字叫:伺服器之間的重定向! 最近在做一個單點登入的介面,基本實現如下:1. webApp-A if (session.getAttribute("UserID"
單點登入,session超時, ajax連結處理
1 錯誤場景 部署問題:用nginx封裝,service攜帶不過來。 2 cas 針對session超時設定 cas對於session超時設定,可以設定檔案cas\WEB-INF\spring-conf
sso單點登入系統(解決session共享)
場景:假設一個使用者將自己的登入資訊提交到後臺,如果session儲存的資訊分佈在多臺機器上,並且不共享,那麼可能導致使用者的登入資訊出現短暫的丟失,為什麼這樣講,因為使用者訪問伺服器中間還要經過負載均衡伺服器,負載均衡採用輪詢的方式轉發使用者的登入請求。有可能訪問到的那臺
【SSO單點登入實現原理與總結】
一、什麼是單點登入SSO(Single Sign-On) SSO是一種統一認證和授權機制,指訪問同一伺服器不同應用中的受保護資源的同一使用者,只需要登入一次,即通過一個應用中的安全驗證後,再訪問其他應用中的受保護資源時,不再需要重新登入驗證。 二、單點登入解決
單點登入SSO-使用session共享方式
Java在叢集中進行單點登入這裡記錄兩種實現方式 環境:tomcat.叢集 方法:將使用者資訊存入session中,實現session共享 第一種:對tomcat進行session複製 進行tomca
【SpringSecurityOAuth2】原始碼分析@EnableOAuth2Sso在Spring Security OAuth2 SSO單點登入場景下的作用
目錄 一、從Spring Security OAuth2官方文件瞭解@EnableOAuth2Sso作用 二、原始碼分析@EnableOAuth2Sso作用 @EnableOAuth2Client OAuth
Springboot 使用Redis+Session實現Session共享 , 實現單點登入
話說在前: 在你開啟我的這篇東西的時候,你應該學會了基於springboot專案使用Redis了,因為我不會在這篇過多去介紹·從redis基本配置。 然後, 你如果登入這模組,使用了shiro 或者說是 security ,沒關係的。 我也是結合shiro一起使用的。
SpringBoot+SpringSession+Redis實現session共享及單點登入
最近在學習springboot,session這個點一直困擾了我好久,今天把這些天踩的坑分享出來吧,希望能幫助更多的人。 一、pom.xml配置 <dependency> <groupId>org.springframework.boot
【試水CAS-4.0.3】第07節_CAS客戶端配置單點登入
完整版見https://jadyer.github.io/2015/07/26/sso-cas-client-login/ /** * @see CAS客戶端配置 * @see -------------------------------------------
單點登入實現(spring session+redis完成session共享
v一、前言 專案中用到的SSO,使用開源框架cas做的。簡單的瞭解了一下cas,並學習了一下 ,有興趣的同學也可以學習一下,寫個demo玩一玩。 v二、工程結構 我模擬了 sso的客戶端和sso的服務端, sso-core中主要是一些sso需要的過濾器和工具類
Spring boot + shiro + redis 實現session共享(偽單點登入)
為實現Web應用的分散式叢集部署,要解決登入session的統一。本文利用shiro做許可權控制,redis做session儲存,結合spring boot快速配置實現session共享。注意本文未解決跨域的問題。不過對於一般的情況能夠很好的起到作用,具體已經在不同埠
thinkphp 二級域名站點 session共享(單點登入)
每個二級域名站點入口檔案 index.php 中加入以下程式碼 define('DOMAIN','cdfanfan.com'); /// cdfanfan.com 改為實際 根域名 //以下