SSO單點(diǎn)登錄之CAS部署教程

流程梳理

  1. 配置安全證書
    1.1 將證書導(dǎo)入到tomcat(客戶端的tomcat)所使用的jdk密鑰庫中
    1.2 將證書拷貝到指定目錄(本例拷貝到tomcat的conf下)
  2. 部署CAS服務(wù)端
    2.1 指定服務(wù)端tomcat 所使用的jdk版本
    2.2 開啟tomcat HTTPS(CAS服務(wù)端的tomcat)
    2.3 將CAS的war包拷貝到tomcat的webapp下
    2.4 修改CAS配置文件deployerConfigContext.xml税肪,使其支持不同的校驗(yàn)方式
  3. 部署CAS客戶端
    3.1 將所需jar包拷貝到web項(xiàng)目的lib下
    3.2 修改web.xml配置文件

準(zhǔn)備工作

  1. 準(zhǔn)備如下軟件包(我實(shí)在window 10 64位系統(tǒng)做的實(shí)驗(yàn))

apache-tomcat-7.0.79.zip
jdk1.7.0_80
cas-server-webapp-4.0.0.war
cas-client-core-3.2.1.jar
commons-logging-1.2.jar
說明:需要3個(gè)tomcat蹋凝,部署CAS中心服務(wù)器肉康、客戶端1號(hào)服務(wù)器奶甘、客戶端2號(hào)服務(wù)器

  1. 配置hosts文件
    文件位置:C:\Windows\System32\drivers\etc\hosts嗓违,在文件最下方加入
127.0.0.1 server.sso.com
127.0.0.1 app1.sso.com
127.0.0.1 app2.sso.com

說明:
server.sso.com --- CAS中心服務(wù)器,這個(gè)域名要與證書域名相同
app1.sso.com --- 客戶端1號(hào)服務(wù)器
app2.sso.com --- 客戶端2號(hào)服務(wù)器

開始部署

1. 配置安全證書

生成證書

使用cmd進(jìn)入jdk的bin目錄焊刹,之后輸入

keytool -genkey -alias ssocas -keyalg RSA -keysize 1024 -keypass hopisso -validity 90 -keystore hopi.keystore -storepass hopisso

命令截圖:


上圖中的紅色框必須與CAS中心服務(wù)器域名相同

導(dǎo)出證書

繼續(xù)在cmd下輸入

keytool -export -alias ssocas -keystore hopi.keystore -file ssocas.crt -storepass hopisso

命令截圖:


導(dǎo)出證書

查看生成文件:


生成對(duì)應(yīng)文件

導(dǎo)入證書

繼續(xù)在cmd下輸入

keytool -import -keystore E:\Dev\DevTools\Runtimes\Java\jdk1.7.0_80\bin\jre\lib\security\cacerts -file ssocas.crt -alias ssocas
說明:證書需要導(dǎo)入客戶端tomcat所使用的jdk中

命令截圖:


注意:輸入密鑰庫口令:要輸入changeit,它是jdk密鑰庫的默認(rèn)密碼唆香,而不是我們之前指定的密碼hopisso

拷貝證書

將證書文件hopi.keystore拷貝到將要部署CAS中心服務(wù)器的tomcat的conf目錄下
操作截圖:

開啟HTTPS

編輯該目錄下的server.xml文件,找到如下圖位置:



修改成:

<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
    keystorePass="hopisso" keystoreFile="/conf/hopi.keystore"
    maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
    clientAuth="false" sslProtocol="TLS"/>

修改后截圖:


指定Tomcat 所使用的jdk

修改tomcat \bin目錄下的catalina.bat 與 setclasspath.bat

catalina.bat

setclasspath.bat

部署CAS服務(wù)端

將cas-server-webapp-4.0.0.war修改為cas.war并拷貝到CAS中心服務(wù)器的tomcat下的webapp下,啟動(dòng)CAS中心服務(wù)器的tomcat吨艇,點(diǎn)擊進(jìn)入CAS中心服務(wù)器
進(jìn)入中心服務(wù)器

點(diǎn)高級(jí)后再點(diǎn)繼續(xù)前往server.sso.com(不安全)

進(jìn)入CAS中心服務(wù)器首頁

CAS中心服務(wù)器的tomcat中找到下圖文件

可以看到我們CAS中心服務(wù)器的默認(rèn)用戶名和密碼

輸入對(duì)應(yīng)的用戶名和密碼后可以看到如下圖所示:


現(xiàn)在說明我們的CAS中心服務(wù)器已經(jīng)部署成功

部署CAS客戶端

拷貝jar包
將cas-client-core-3.2.1.jar和commons-logging-1.2.jar拷貝到我們的客戶端項(xiàng)目中(這里我使用了tomcat默認(rèn)的examples項(xiàng)目)躬它,見下圖


配置端口

找到客戶端tomcat服務(wù)器下的conf\server.xml文件
修改如下3個(gè)端口

原來是8005

原來是8080

原來是8009

修改web.xml

找到客戶端tomcat的webapps\examples\WEB-INF\web.xml文件,在最下面加入如下配置

    <!-- 用于單點(diǎn)退出东涡,該過濾器用于實(shí)現(xiàn)單點(diǎn)登出功能冯吓,可選配置-->
    <listener>
        <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
    </listener>
    <!-- 該過濾器用于實(shí)現(xiàn)單點(diǎ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>CAS Filter</filter-name>
        <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
        <init-param>
            <param-name>casServerLoginUrl</param-name>
            <param-value>https://server.sso.com:8443/cas/login</param-value>
        </init-param>
        <init-param>
            <param-name>serverName</param-name>
            <param-value>http://app1.sso.com:18080</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>CAS Filter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <!-- 該過濾器負(fù)責(zé)對(duì)Ticket的校驗(yàn)工作疮跑,必須啟用它 -->
    <filter>
        <filter-name>CAS Validation Filter</filter-name>
        <filter-class>
            org.jasig.cas.client.validation.Cas10TicketValidationFilter</filter-class>
        <init-param>
            <param-name>casServerUrlPrefix</param-name>
            <param-value>https://server.sso.com:8443/cas</param-value>
        </init-param>
        <init-param>
            <param-name>serverName</param-name>
            <param-value>http://app1.sso.com:18080</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>CAS Validation Filter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <!--
        該過濾器負(fù)責(zé)實(shí)現(xiàn)HttpServletRequest請(qǐng)求的包裹桑谍,比如允許開發(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>

配置完成后贿条,啟動(dòng)CAS中心服務(wù)器的tomcat雹仿,再啟動(dòng)客戶端1號(hào)服務(wù)器的tomcat,在瀏覽器訪問:http://app1.sso.com:18080/examples/servlets/servlet/HelloWorldExample看看是否跳轉(zhuǎn)到了CAS認(rèn)證界面整以,回車之后胧辽,會(huì)出現(xiàn)如下圖:

image.png

觀察會(huì)發(fā)現(xiàn)瀏覽器的地址欄中URL信息是這樣的:

https://server.sso.com:8443/cas/login?service=http%3A%2F%2Fapp1.sso.com%3A18080%2Fexamples%2Fservlets%2Fservlet%2FHelloWorldExample

我想你已經(jīng)知道什么意思了,由于你沒有登錄CAS中心服務(wù)器認(rèn)證系統(tǒng)公黑,CAS客戶端1號(hào)攔截到你訪問的客戶端應(yīng)用邑商,首先進(jìn)入到CAS中心服務(wù)器認(rèn)證系統(tǒng)登錄界面,同時(shí)URL后面加上你想訪問的地址信息凡蚜,當(dāng)你登錄成功后人断,CAS中心服務(wù)器會(huì)轉(zhuǎn)向到你剛剛訪問的地址,也就是:

http://app1.sso.com:18080/examples/servlets/servlet/HelloWorldExample;jsessionid=B99CBA08ADD2C4F1A8661195CD79F5DD

轉(zhuǎn)向到這個(gè)地址之后朝蜘,瀏覽器會(huì)顯示如下內(nèi)容:

image.png

上面這個(gè)內(nèi)容恶迈,顯示的就是你訪問tomcat中的examples項(xiàng)目的一個(gè)servlet的返回結(jié)果。這里谱醇,如果你夠細(xì)心的話暇仲,你會(huì)發(fā)現(xiàn)瀏覽器地址欄又多了一個(gè)內(nèi)容,即多了一個(gè)jsessionid參數(shù)副渴,這個(gè)就是CAS認(rèn)證的原理所在奈附,使用的是COOKIE機(jī)制。
按照上面的方法來配置客戶端2號(hào)服務(wù)器

登出

在瀏覽器中輸入連接:https://server.sso.com:8443/cas/logout可登出系統(tǒng)

擴(kuò)展知識(shí)

數(shù)據(jù)庫校驗(yàn)

如何配置用戶名和密碼通過數(shù)據(jù)庫進(jìn)行交互驗(yàn)證的呢煮剧?

  1. 需要將幾個(gè)jar文件斥滤,放到CAS服務(wù)的lib目錄下讼载,我本地使用的jar版本分別是c3p0-0.9.1.2.jar、cas-server-support-jdbc-4.0.0.jar中跌、mysql-connector-java-5.1.13-bin.jar,這3個(gè)缺一不可菇篡。將這3個(gè)jar放到CAS中心服務(wù)器的tomcat \webapps\cas\WEB-INF\lib目錄下漩符。
  2. 修改配置,支持mysql數(shù)據(jù)庫交互驗(yàn)證編輯CAS中心服務(wù)器的tomcat \webapps\cas\WEB-INF\ deployerConfigContext.xml文件驱还,你會(huì)看到有這樣一段配置:
    image.png

    注釋掉第二個(gè)entry配置嗜暴,最終配置如下:
<constructor-arg>
  <map> 
    <entry key-ref="proxyAuthenticationHandler" value-ref="proxyPrincipalResolver" />
       <!-- 注釋這個(gè)-->
       <!--<entry key-ref="primaryAuthenticationHandler" value-ref="primaryPrincipalResolver" />-->
    <!-- key-ref指定自己的本地?cái)?shù)據(jù)庫訪問 -->
    <entry key-ref="dbAuthHandler" value-ref="primaryPrincipalResolver"/>
   </map>
 </constructor-arg>

然后再在這個(gè)xml中新加入2個(gè)bean配置,如下:

<!-- 指定c3p0數(shù)據(jù)源 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    <property name="driverClass" value="com.mysql.jdbc.Driver" />
    <property ame="jdbcUrl" value="jdbc:mysql://127.0.0.1:3306/myProject?useUnicode=true&amp;characterEncoding=UTF-8" />
    <property name="user" value="root" />
    <property name="password" value="root
</bean>

<!-- 訪問本地?cái)?shù)據(jù)庫 -->
<bean id="dbAuthHandler"
      class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler"
      p:dataSource-ref="dataSource"
      p:sql="SELECT u.`password` FROM `sec_user` u WHERE u.`account` = ?" />

現(xiàn)在议蟆,CAS已經(jīng)支持?jǐn)?shù)據(jù)庫交互驗(yàn)證了闷沥,服務(wù)端tomcat也支持HTTPS協(xié)議訪問,現(xiàn)在咐容,我們來搭建客戶端舆逃,實(shí)現(xiàn)多個(gè)客戶端的單點(diǎn)登錄。這里戳粒,我本地只使用2個(gè)tomcat客戶端來測(cè)試路狮,其實(shí)已經(jīng)滿足單點(diǎn)登錄的要求了,至少2個(gè)應(yīng)用蔚约。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末奄妨,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子苹祟,更是在濱河造成了極大的恐慌砸抛,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,718評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件树枫,死亡現(xiàn)場(chǎng)離奇詭異直焙,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)砂轻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門箕般,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人舔清,你說我怎么就攤上這事丝里。” “怎么了体谒?”我有些...
    開封第一講書人閱讀 158,207評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵杯聚,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我抒痒,道長(zhǎng)幌绍,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,755評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮傀广,結(jié)果婚禮上颁独,老公的妹妹穿的比我還像新娘。我一直安慰自己伪冰,他們只是感情好誓酒,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著贮聂,像睡著了一般靠柑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上吓懈,一...
    開封第一講書人閱讀 50,050評(píng)論 1 291
  • 那天歼冰,我揣著相機(jī)與錄音,去河邊找鬼耻警。 笑死隔嫡,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的甘穿。 我是一名探鬼主播畔勤,決...
    沈念sama閱讀 39,136評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼扒磁!你這毒婦竟也來了庆揪?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,882評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤妨托,失蹤者是張志新(化名)和其女友劉穎缸榛,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體兰伤,經(jīng)...
    沈念sama閱讀 44,330評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡内颗,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了敦腔。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片均澳。...
    茶點(diǎn)故事閱讀 38,789評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖符衔,靈堂內(nèi)的尸體忽然破棺而出找前,到底是詐尸還是另有隱情,我是刑警寧澤判族,帶...
    沈念sama閱讀 34,477評(píng)論 4 333
  • 正文 年R本政府宣布躺盛,位于F島的核電站,受9級(jí)特大地震影響形帮,放射性物質(zhì)發(fā)生泄漏槽惫。R本人自食惡果不足惜周叮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望界斜。 院中可真熱鬧仿耽,春花似錦、人聲如沸各薇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽得糜。三九已至,卻和暖如春晰洒,著一層夾襖步出監(jiān)牢的瞬間朝抖,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評(píng)論 1 267
  • 我被黑心中介騙來泰國打工谍珊, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留治宣,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,598評(píng)論 2 362
  • 正文 我出身青樓砌滞,卻偏偏與公主長(zhǎng)得像侮邀,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子贝润,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評(píng)論 2 351

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

  • 【環(huán)境說明】:本文演示過程在同一個(gè)機(jī)器上的(也可以在三臺(tái)實(shí)體機(jī)器或者三個(gè)的虛擬機(jī)上)绊茧,環(huán)境如下: windows7...
    黃海佳閱讀 8,781評(píng)論 2 15
  • 【環(huán)境說明】: 本文演示過程在同一個(gè)機(jī)器上的(也可以在三臺(tái)實(shí)體機(jī)器或者三個(gè)的虛擬機(jī)上),環(huán)境如下: windows...
    yljava閱讀 9,258評(píng)論 3 8
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理打掘,服務(wù)發(fā)現(xiàn)华畏,斷路器,智...
    卡卡羅2017閱讀 134,638評(píng)論 18 139
  • JEESZ分布式框架單點(diǎn)登錄集成方案 第一節(jié):?jiǎn)吸c(diǎn)登錄簡(jiǎn)介 第一步:了解單點(diǎn)登錄 SSO主要特點(diǎn)是: SSO應(yīng)用之...
    ITsupuerlady閱讀 696評(píng)論 0 0
  • JEESZ分布式框架單點(diǎn)登錄集成方案 第一節(jié):?jiǎn)吸c(diǎn)登錄簡(jiǎn)介 第一步:了解單點(diǎn)登錄 SSO主要特點(diǎn)是: SSO應(yīng)用之...
    ITsupuerlady閱讀 670評(píng)論 0 6