sso單點登錄原理與簡單實現(xiàn)

一常摧、單點登錄概念理解

? ? ? ? 在多個應用系統(tǒng)革屠,或者是分布式系統(tǒng)中,用戶只需要登錄一次排宰,再訪問其他系統(tǒng)似芝,就不需要再次登錄,自動登錄板甘。

二党瓮、單點登錄實現(xiàn)原理

????????要實現(xiàn)單點登錄,主要需要解決兩個問題:1.session共享盐类,2.ajax跨域問題寞奸。可以將用戶身份信息存儲在第三方單點登錄認證服務器在跳,可以使用cas單點登錄框架實現(xiàn)枪萄,cas共享用戶身份信息,cookie存儲用戶身份信息唯一標識(所以要實現(xiàn)單點登錄猫妙,瀏覽器不能禁用cookie),cas的協(xié)議過程如下圖:


三瓷翻、使用cas實現(xiàn)單點登錄

? ? ? ? 1.下載cas服務端cas-server-webapp-4.0.0.war ,將其改名為 cas.war 部署到 tomcat 目錄下的 webapps 下,瀏覽器輸入 http://localhost:8080/cas/login齐帚,即可看到登錄頁面:


? ? 2.cas客戶端搭建妒牙,可以搭建兩個或兩個以上的客戶端項目進行測試,搭建參考下面

? ? ? ? (1)搭建maven工程引入cas相關依賴

<dependencies>

<dependency>

<groupId>org.jasig.cas.client</groupId>

<artifactId>cas-client-core<artifactId>

<version>3.3.3<version>

</dependency>

<dependency>

<groupId>javax.servlet</groupId>

<artifactId>servlet-api</artifactId>

<version>2.5</version>

<scope>provided</scope>

</dependency>

</dependencies>

(2)添加 web.xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns="http://java.sun.com/xml/ns/javaee"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"

version="2.5">

<!-- 用于單點退出对妄,該過濾器用于實現(xiàn)單點登出功能湘今,可選配置 -->

<listener>

<listener-class>

org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>

</listener>

<!-- 該過濾器用于實現(xiàn)單點登出功能,可選配置剪菱。 -->

<filter>

<filter-name>CAS Single Sign Out Filter</filter-name>

<filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>

</filter>

<filter-mapping>

<filter-name>CAS Single Sign Out Filter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

<!-- 該過濾器負責用戶的認證工作摩瞎,必須啟用它 -->

<filter>

<filter-name>CASFilter</filter-name>

<filter-class>

org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>

<init-param>

<param-name>casServerLoginUrl</param-name>

<param-value>http:///localhost:8080/cas/login</param-value>

<!--這里的 server 是cas服務端的 IP 和端口,根據(jù)所部屬的服務端的ip端口做相應修改-->

</init-param>

<init-param>

<param-name>serverName</param-name>

<param-value>http://localhost:9091</param-value>

<!--這里的 是cas客戶端項目的 訪問地址孝常,根據(jù)項目做相應修改-->

</init-param>

</filter>

<filter-mapping>

<filter-name>CASFilter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

<!-- 該過濾器負責對 Ticket 的校驗工作愉豺,必須啟用它 -->

<filter>

<filter-name>CAS Validation Filter</filter-name>

<filter-class>

org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter

</filter-class>

<init-param>

<param-name>casServerUrlPrefix</param-name>

<param-value>http:///localhost:8080/cas</param-value>

</init-param>

<init-param>

<param-name>serverName</param-name>

<param-value>http://localhost:9091</param-value>

</init-param>

</filter>

<filter-mapping>

<filter-name>CAS Validation Filter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

<!-- 該過濾器負責實現(xiàn) HttpServletRequest 請求的包裹, 比如允許開發(fā)者通過 HttpServletRequest 的 getRemoteUser()方法獲得

SSO 登錄用戶的登錄名茫因,可選配置。 -->

<filter>

<filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>

<filter-class>org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class>

</filter>

<filter-mapping>

<filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

<!-- 該過濾器使得開發(fā)者可以通過 org.jasig.cas.client.util.AssertionHolder 來獲取用戶 的登錄名杖剪。

比如 AssertionHolder.getAssertion().getPrincipal().getName()冻押。 -->

<filter>

<filter-name>CAS Assertion Thread Local Filter</filter-name>

<filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class>

</filter>

<filter-mapping>

<filter-name>CAS Assertion Thread Local Filter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

</web-app>

????3.單點登錄測試

? ? ? ? (1)啟動cas服務端

? ? ? ? (2)啟動客戶端工程1和客戶端工程2

? ? ? ? (3)在瀏覽器分別訪問兩個客戶端項目,均會跳轉到cas登錄頁面盛嘿,輸入用戶名密碼洛巢,訪問其中一個客戶端項目后,再訪問另一個客戶端項目次兆,不需要再進行登錄稿茉,單點登錄實現(xiàn)。

? ? ? ? 4.以上測試的登錄頁面是cas自帶的登錄頁面芥炭,可改為自己項目的登錄頁面漓库,同時可配置用戶名和密碼從數(shù)據(jù)庫中讀取,具體實現(xiàn)可參考其他資料园蝠,這里不再敘述渺蒿。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市彪薛,隨后出現(xiàn)的幾起案子茂装,更是在濱河造成了極大的恐慌,老刑警劉巖善延,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件少态,死亡現(xiàn)場離奇詭異,居然都是意外死亡易遣,警方通過查閱死者的電腦和手機彼妻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人澳骤,你說我怎么就攤上這事歧强。” “怎么了为肮?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵摊册,是天一觀的道長。 經(jīng)常有香客問我颊艳,道長茅特,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任棋枕,我火速辦了婚禮白修,結果婚禮上,老公的妹妹穿的比我還像新娘重斑。我一直安慰自己兵睛,他們只是感情好,可當我...
    茶點故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布窥浪。 她就那樣靜靜地躺著祖很,像睡著了一般。 火紅的嫁衣襯著肌膚如雪漾脂。 梳的紋絲不亂的頭發(fā)上假颇,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天,我揣著相機與錄音骨稿,去河邊找鬼笨鸡。 笑死,一個胖子當著我的面吹牛坦冠,可吹牛的內(nèi)容都是我干的形耗。 我是一名探鬼主播,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼辙浑,長吁一口氣:“原來是場噩夢啊……” “哼趟脂!你這毒婦竟也來了?” 一聲冷哼從身側響起例衍,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤昔期,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后佛玄,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體硼一,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年梦抢,在試婚紗的時候發(fā)現(xiàn)自己被綠了般贼。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖哼蛆,靈堂內(nèi)的尸體忽然破棺而出蕊梧,到底是詐尸還是另有隱情,我是刑警寧澤腮介,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布肥矢,位于F島的核電站,受9級特大地震影響叠洗,放射性物質發(fā)生泄漏甘改。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一灭抑、第九天 我趴在偏房一處隱蔽的房頂上張望十艾。 院中可真熱鬧,春花似錦腾节、人聲如沸忘嫉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽庆冕。三九已至,卻和暖如春救湖,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背涎才。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工鞋既, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人耍铜。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓邑闺,卻偏偏與公主長得像,于是被迫代替她去往敵國和親棕兼。 傳聞我的和親對象是個殘疾皇子陡舅,可洞房花燭夜當晚...
    茶點故事閱讀 45,047評論 2 355

推薦閱讀更多精彩內(nèi)容