1. 程式人生 > >IDEA-CAS-SSO單點登入-資料庫

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&amp;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別和我的一樣

,你連不上我的資料庫,那 &nbsp;&nbsp;&nbsp;太正常了~!

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。

(五)SSOCAS框架登入, 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,現在我把