IDEA-CAS-SSO單點登入-資料庫
【環境說明】
本案例演示過程在同一個機器上的3個tomcat伺服器上,環境如下:
-
windows10 64位
-
jdk1.7.0_80
-
apache-tomcat-7.0.82-windows-x64
-
cas-server-webapp-4.0.0.war、cas-client-core-3.2.1.jar、commons-logging.jar
-
確保本地jdk環境已經搭建好,JAVA_HOME環境變數配置完畢。
有關cas概念請使用TP(傳送)cas-sso單點登入理論 詳細瞭解,我就不贅述了。
一.修改hosts檔案
1.編輯C:\Windows\System32\drivers\etc\hosts 新增如下3條資訊
127.0.0.1 server.zhy94.com ---對應cas-server伺服器部署域名 127.0.0.1 client1.zhy94.com --對應web應用1伺服器部署域名 127.0.0.1 client2.zhy94.com --對應web應用2伺服器部署域名
二.配置安全證書
1.cmd開啟命令視窗
2.使用如下命令生成證書
keytool -genkey -alias ssodemo -keyalg RSA -keysize 1024 -keypass zhy123 -validity 365 -keystore c:\zhy.keystore -storepass
zhy123
-alias後面的別名可以自定義,-keypass指定證書金鑰庫的密碼, -storepass和前面keypass密碼相同,否則下面tomcat 配置https 會訪問失敗
-keystore指定證書的位置,
這裡指定放在c盤根目錄,金鑰庫名稱可以自定義,這裡檔名為zhy.keystore
重:名字與姓氏這一選項應與之前hosts檔案上的cas-server域名一直
3.匯出證書
keytool -export -alias ssodemo -keystore c:\zhy.keystore -file c:\ssodemo.crt -storepass zhy123
-alias後面的名稱要與生成證書的命令裡面的alias的名稱一致. –keystore後面指定證書存放的位置,這裡我放在C盤根目錄,
同時證書名稱要與【生成證書】對應的命令裡的keystore名稱一致.這裡是zhy.keystore,-file後面才crt路徑,我也指定在c盤根目錄.
–storepass的證書密碼要與上面輸入的密碼一致.檢查c盤下是否存在該證書 ssodemo.crt
4.使該證書匯入jdk證書庫,命令窗進入jdk下的如下路徑
cd C:\Program Files\Java\jdk1.7.0_80\jre\lib\security
必須進入該資料夾,然後再執行下面的命令
keytool -import -alias ssodemo -file c:\ssodemo.crt -keystore cacerts -trustcacerts
5.如果原來有證書需要更新則
keytool -list -keystore cacerts
keytool -delete -alias akazam_email -keystore cacerts
命令窗進入jdk目錄下的證書路徑,即C:\Program Files\Java\jdk1.7.0_80\jre\lib\security
keytool -import -alias ssodemo -file c:\ssodemo.crt -keystore cacerts -trustcacerts
3.部署CAS-Server伺服器
1.tomcat安裝目錄下如下路徑:D:\User\ProgramFile\tomcat7\conf 開啟server.xml檔案<!-- <Connector executor="tomcatThreadPool" port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> -->
將註釋去掉,並修改為
<Connectorport="8443" protocol="org.apache.coyote.http11.Http11Protocol" maxThreads="150" SSLEnabled="true" scheme="https" secure="true" keystoreFile="C:/zhy.keystore" keystorePass="zhy123" clientAuth="false" sslProtocol="TLS" />
其中keystoreFile 為證書位置,keystorePass為剛剛設定的密碼,這兩項一定要與前面一致
2.驗證https的可用性
進入tomcat如下路徑:D:\User\ProgramFile\tomcat7\bin
執行startup.bat指令碼,然後登陸https://server.zhy94.com:8443/cas/login,首先應為https連結有風險,點選高階選項,繼續訪問
應該進入tomcat的主頁
4.部署CAS-Server
下載的檔案應為:cas-server-4.0.0-release.zip 解壓後為:cas-server-4.0.0,進入改路徑下的modules資料夾,找到
cas-server-webapp-4.0.0.war,將該檔案重新命名為cas.war,並放入D:\User\ProgramFile\tomcat7\webapps下,然後呼叫
D:\User\ProgramFile\tomcat7\bin下的startup.bat指令碼啟動tomcat,war包就會自動解壓為cas專案。然後訪問如下連結
https://server.zhy94.com:8443/cas/login 進入cas登陸驗證介面。如下圖示
點選上圖標誌按鈕可變為中文(i18n)
至於使用者名稱密碼在D:\User\ProgramFile\tomcat7\webapps\cas\WEB-INF 下的deployerConfigContext.xml檔案中
找到
<bean id="primaryAuthenticationHandler" class="org.jasig.cas.authentication.AcceptUsersAuthenticationHandler"> <propertyname="users"> <map> <entry key="casuser" value="Mellon"/> </map> </property> </bean>
其中key為賬戶,value為密碼(應該和我的一樣,放心直接登陸吧)。
但是,肯定有人問使用者名稱密碼一定需要存入資料庫吧,所以下面實在資料庫設定賬戶密碼的方法。
資料庫設定賬戶密碼:
1.新增jar包
資料庫使用的為:mysql
cas作為一個webapp已經部署了,但是他沒有訪問資料庫的jar包,就需要我們手動給他加入啦
為cas專案(路徑為:D:\User\ProgramFile\tomcat7\webapps\cas\WEB-INF\lib)
WEB-INF下lib下新增如下三個jar包
c3p0-0.9.1.2.jar、cas-server-support-jdbc-4.0.0.jar、mysql-connector-java-5.1.13-bin.jar
下載地址(賺點積分,多謝打賞):jar包下載
2.修改cas配置檔案,以方便支援資料庫認證。
編輯D:\User\ProgramFile\tomcat7\webapps\cas\WEB-INF下的deployerConfigContext.xml
<bean id="authenticationManager" class="org.jasig.cas.authentication.PolicyBasedAuthenticationManager"> <constructor-arg> <map> <!-- | IMPORTANT | Every handler requires a unique name. | If more than one instance of the same handler class is configured, you must explicitly | set its name to something other than its default name (typically the simple class name). --> <entry key-ref="proxyAuthenticationHandler" value-ref="proxyPrincipalResolver" /> <!--<entry key-ref="primaryAuthenticationHandler" value-ref="primaryPrincipalResolver" />--> <!-- key-ref指定自己的本地資料庫訪問 --> <entry key-ref="dbAuthHandler" value-ref="primaryPrincipalResolver"/> </map> </constructor-arg>
按照我上圖的處理方式處理,註釋掉<!--<entry key-ref="primaryAuthenticationHandler" value-ref="primaryPrincipalResolver" />-->
新增<entry key-ref="dbAuthHandler" value-ref="primaryPrincipalResolver"/>
並在該檔案新增資料庫的bean如下
<!-- 指定c3p0資料來源 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="com.mysql.jdbc.Driver" /> <property name="jdbcUrl" value="jdbc:mysql://127.0.0.1:3306/webitma?useUnicode=true&characterEncoding=UTF-8" /> <property name="user" value="root" /> <property name="password" value="123" /> </bean> <!-- 訪問本地資料庫 --> <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` = ?" />
其中sql語句可換為任何一張本地(自定義)使用者表和任何欄位。所以下面就是你建表配置資料庫啦~!看清上面的jdbcUrl別和我的一樣
,你連不上我的資料庫,那 太正常了~!
5.部署web應用,實現單點登入
下面就要到最總要的時刻啦~~! 1.開啟我們的IDEA(我的版本是IDEA14),新建一個java--web專案(這不用寫了吧?這個不會就看cas-server有點好高騖遠了哦~!) 我新建的web1名稱為:casClient1然後為WEB-INF下建立lib資料夾,因為需要與客戶端互動,所以匯入: cas-client-core-3.2.1.jar、commons-logging.jar包,至於jar包怎麼匯入到你的專案中去, 下載地址(沒啦~!我保證這是最後一個賺積分的連結(哈哈)): 編輯index.jsp 我寫的內容是<h1>This is casClient1~~~~~~!...........king of the world</h1>
以區分casClient1和即將部署的casClient2
然後修改casClient1 下的web.xml,新增下面的filter,大家仔細觀看下面的配置,其中servName(有兩個,都要改)
寫的是:http://client1.zhy94.com:9090,所以等會部署的時候埠要寫9090了
(同時記住,你剛剛部署cas-server的tomcat視窗不要關,關了誰幫你驗證啊?),
繼續寫8080,會個部署cas-server的tomcat伺服器發生埠衝突。
<!-- 用於單點退出,該過濾器用於實現單點登出功能,可選配置--> <listener> <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class> </listener> <!-- 該過濾器用於實現單點登出功能,可選配置 --> <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.zhy94.com:8443/cas/login</param-value> </init-param> <init-param> <param-name>serverName</param-name> <param-value>http://client1.zhy94.com:9090</param-value> </init-param> </filter> <filter-mapping> <filter-name>CAS Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 該過濾器負責對Ticket的校驗工作,必須啟用它 --> <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.zhy94.com:8443/cas</param-value> </init-param> <init-param> <param-name>serverName</param-name> <param-value>http://client1.zhy94.com:9090</param-value> </init-param> </filter> <filter-mapping> <filter-name>CAS Validation Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 該過濾器負責實現HttpServletRequest請求的包裹,比如允許開發者通過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> <!-- 該過濾器使得開發者可以通過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>,接下來就是激動人心的IDEA啟動該專案實現CAS---SSO單點登陸的時刻啦~!
六,最終實現
如圖: 然後啟動我們的專案(再說一次,原來部署cas-server的tomcat視窗不要關啊,關了就沒法驗證啦~!)訪問:http://client1.zhy94.com:9090/casClient1/index.jsp
就會自動跳轉到:
https://server.zhy94.com:8443/cas/login?service=http%3A%2F%2Fclient1.zhy94.com%3A9090%2FcasClient1%2Findex.jsp
如下圖所示:
之後輸入你在資料庫設計的賬戶密碼就好了,登陸結果如下圖:
成功訪問,然後如法炮製另一個javaweb專案。並啟動,直接訪問
之後會出現登陸成功介面,這就表示cas-server已經部署成功,我們需要在另外兩臺伺服器上寫兩個專案然後利用cas進行驗證。
http://client2.zhy94.com:8989/casClient2/index.jsp,就會無需驗證,直接訪問到casClient2的index.jsp頁面啦~!
想重複實現,只要用瀏覽器清除Cookie就好了~!
到此為止~!IDEA -CAS -SSO單點登入實現啦~!菜鳥一枚多多見諒。
本文大片抄襲,呸~!是引用了另外一個大拿的文章傳送門在此傳送門。(本片文章所有資源下載共需9個積分,實在沒有的話請聯絡本人QQ:583760722(最好自己下,我想賺點積分啦,知識無價,友誼長存啊~!))。
相關推薦
IDEA-CAS-SSO單點登入-資料庫
【環境說明】 本案例演示過程在同一個機器上的3個tomcat伺服器上,環境如下: windows10 64位 jdk1.7.0_80 apache-tomcat-7.0.82-windows-x64 cas-server-webapp-4.0.0.war、ca
設定cas sso單點登入地址從properties讀取
檢視單點登入原始碼發現, casServerLoginUrl地址 會先從 FilterConfig 中獲取,也就是全域性配置檔案中獲取,當然我們也可以在web.xml中用 <param-name>casServerLoginUrl</param-name&g
Java架構-CAS SSO單點登入框架介紹
1.瞭解單點登入 SSO 主要特點是: SSO 應用之間使用 Web 協議(如 HTTPS) ,並且只有一個登入入口. SSO 的體系中有下面三種角色: User(多個) Web 應用(多個) SSO 認證中心(一個) 2.SSO 實
cas SSO單點登入相關內容
小記: 在做一套系統,準備接入整合登入。但是該系統對接的使用者系統過多,所以要給每個使用者系統在web.xml中配置相應的過濾器,導致web.xml過於冗雜龐大,不利於管理。解決方案:給所有使用者的登入請求配置成同一個登入請求,在web
CAS-SSO 單點登入之伺服器搭建 (linux下編譯cas-overlay-template )
(一)安裝包和環境依賴 jdk-8u171-linux-x64.tar apache-tomcat-8.5.31.tar apache-maven-3.5.3-bin.tar cas-overlay-template-master.zip 需要自行下載最新版本,官網
CAS 實現 SSO 單點登入
環境 cas-server-4.1.8,cas-client-3.4.0,Java-8,Maven-3,Tomcat-7.0.72 CAS Server 安裝 點此進入 CAS 下載列表,選擇下載 cas-4.1.
基於CAS的單點登入SSO[5]: 基於Springboot實現CAS客戶端的前後端分離
基於CAS的單點登入SSO[5]: 基於Springboot實現CAS客戶端的前後端分離 作者:家輝,日期:2017-08-24 CSDN部落格: http://blog.csdn.net/gobitan 摘要:現在大部分系統的開發都已經
基於CAS的單點登入SSO[4]: 加入兩個CAS客戶端測試單點登入
基於CAS的單點登入SSO[4]: 加入兩個CAS客戶端測試單點登入 作者:家輝,日期:2017-08-22 CSDN部落格: http://blog.csdn.net/gobitan 摘要:本系列的前三篇文章分別搭建了基於CAS的單點登入伺服器,並讓伺
基於CAS的單點登入SSO[3]: 改造cas-overlays-template支援Redis儲存Ticket
基於CAS的單點登入SSO[3]: 改造cas-overlays-template支援Redis儲存Ticket 作者:家輝,日期:2017-08-20 CSDN部落格: http://blog.csdn.net/gobitan 摘要:預
CAS實現SSO單點登入
環境cas-server-4.1.8,cas-client-3.4.0,Java-8,Maven-3,Tomcat-7.0.72 CAS Server 安裝點此進入 CAS 下載列表,選擇下載 cas-4.1.8.zip。 解壓縮 cas-4.1.8.zip 並進入 cas-server-webapp 目
ssm + redis 實現sso單點登入,類適於CAS
1.原理講解 由於CAS 過於重量級且時間成本較高 ,所以我決定公司採用自己的sso 單點系統來處理系統之間只要一個系統登入成功,其他子系統就不用登入。 舉例說明: 比如公司有 系統 A 系統 B 此時我們就要定義一個專門用來做登入認證的sso系統。 如果使用者登入的是
CAS實現單點登入(SSO)
什麼是單點登入 單點登入(Single Sign On),簡稱為 SSO,是目前比較流行的企業業務整合的解決方案之一。SSO的定義是在多個應用系統中,使用者只需要登入一次就可以訪問所有相互信任的應用系統。 我們目前的系統存在諸多子系統,而這些子系統是分別部署在不
CAS實現單點登入SSO執行原理探究(終於明白了)
一、不落俗套的開始 1、背景介紹 單點登入:Single Sign On,簡稱SSO,SSO使得在多個應用系統中,使用者只需要登入一次就可以訪問所有相互信任的應用系統。 CAS框架:CAS(Central Authentication Service)是實現S
CAS實現單點登入(sso)搭建流程 伺服器端搭建
一、簡介 1、cas是有耶魯大學研發的單點登入伺服器 2、所用環境 · Linux系統 · To
springMVC整合shiro與cas實現SSO單點登入
一、前言 Apache Shiro與Spring Security一樣是Java的一個安全框架。那為什麼與Spring整合卻用Shiro?其實我個人是認為Spring Security太過於笨重,要寫太多的過濾器,Shiro的配置簡單這就是我選擇的理由,何況Spring官方
CAS實現SSO單點登入原理
1. CAS簡介 CAS(Central Authentication Service) 是 Yale大學發起的一個企業級的、開源的專案,旨在為 Web 應用系統提供一種可靠的單點登入解決方法(屬於Web SSO)。 CAS開始於2001年, 並在 2004年
CAS Server 單點登入SSO 認證服務搭建部署
部署環境 1 下載CAS Server 4.0 :https://github.com/apereo/cas/releases/tag/v4.0.0 這裡選擇4.0是因為其有官方release版本的cas-server-webapp-4.0.0.war。
(五)SSO之CAS框架單點登入, session超時, ajax連結處理
1 錯誤場景 部署問題:用nginx封裝,service攜帶不過來。 2 cas 針對session超時設定 cas對於session超時設定,可以設定檔案cas\WEB
CAS實現SSO單點登入-CAS Server搭建
最近公司連續接了三四個單點登入整合的專案,由我們公司提供CAS Server端的,也有需要我們把Client與其他公司提供的Server端對接的,我負責把我們公司的一個Client與另外一個公司提供的Server端對接,由於我們需要.Net2.0
SSO單點登入系列6:cas單點登入防止登出退出後重新整理後退ticket失效報500錯
這個問題之前就發現過,最近有幾個哥們一直在問我這個怎麼搞,我手上在做另一個專案,cas就暫時擱淺了幾周。現在我們來一起改一下你的應用(client2/3)的web.xml來解決這個2b問題,首先看下錯誤描述: 問題: 我登入了client2,又登入了client3,現在我把