CAS (1) —— Mac下配置CAS到Tomcat(服務端)
tomcat版本: tomcat-8.0.29
jdk版本: jdk1.8.0_65
cas版本: cas4.1.2
cas-client-3.4.1
參考來源:
Tomcat (1) —— Mac下配置Tomcat Https/SSL
【高可用HA】Apache (2) —— Mac下安裝多個Apache Tomcat例項
目標架構
下載
首先登陸jasig網站http://downloads.jasig.org/,下載相應的cas版本。
由於網站只提供原始碼包而不提供釋出包,所以需要自己下載來編譯。
cas會為不同的客戶端消費者提供client包,這裡我們選擇java-client作為演示。
先編譯服務端
cas-server-webapp Richard$ mvn clean install -Dmaven.test.skip
然後在target下找到相應的war包"cas-server-webapp-4.1.2.war"
配置
服務端
簡單設定
參照以下文章為Tomcat配置好Https
Tomcat (1) —— Mac下配置Tomcat Https/SSL
【高可用HA】Apache (2) —— Mac下安裝多個Apache Tomcat例項
然後我們將打好的war包部署再Tomcat上
修改登陸的提示文字"./servers/cluster/tomcat/node-c/webapps/cas/WEB-INF/view/jsp/default/ui/casLoginView.jsp"(為以後的叢集環境測試做準備)
然後通過https訪問node-c
https://sso.hoau.com:8433/cas/login
開啟檔案"deployerConfigContext.xml"檢視CAS相關的配置:
<bean id="primaryAuthenticationHandler"
class="org.jasig.cas.authentication.AcceptUsersAuthenticationHandler">
<property name="users">
<map>
<entry key="casuser" value="Mellon"/>
</map>
</property>
</bean>
* 初始預設狀態下,CAS 通過配置的檔案裡的使用者名稱密碼登陸 casuser/Mellon
嘗試登陸
利用資料庫來驗證
需要的依賴:
cas-server-support-jdbc-4.1.2.jar
mysql-connector-java-5.1.37.jar
MySQL:
在本地的MySQL中建立新的資料庫並新建表app_user作為驗證使用者的目標資料庫
修改 deployerConfigContext.xml:
將bean "primaryAuthenticationHandler"註釋掉
<!-- by Richard
<bean id="primaryAuthenticationHandler"
class="org.jasig.cas.authentication.AcceptUsersAuthenticationHandler">
<property name="users">
<map>
<entry key="casuser" value="Mellon"/>
</map>
</property>
</bean>
-->
增加資料庫dataSource
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/hoau-dev"></property>
<property name="username" value="root"></property>
<property name="password" value="Root123"></property>
</bean>
增加PasswordEncoder
<bean id="myPasswordEncoder"
class="org.jasig.cas.authentication.handler.PlainTextPasswordEncoder"/>
*注意 此處的Encoder必須,有的論壇文章可能會使用"DefaultPasswordEncoder",因為我們示例中的密碼資料並沒有使用加密,所以我們這裡用"PlainTextPasswordEncoder"
<bean id="myPasswordEncoder"
class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder">
<constructor-arg index="0">
<value>MD5</value>
</constructor-arg>
</bean>
增加DB的""
<bean id="dbAuthHandler" class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
<property name="sql" value="select password from app_user where username=?" />
<property name="dataSource" ref="dataSource" /> <property name="passwordEncoder" ref="myPasswordEncoder"/> </bean>
最後回頭檢視"authenticationManager"的引數
由於我們已經將配置檔案的使用者驗證方式"primaryAuthenticationHandler"修改成了DB的驗證方式"dbAuthHandler",所以我們需要修改"primaryPrincipalResolver"的引數
<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" />
<!-- Richard change primaryPrincipalResolver
<entry key-ref="primaryAuthenticationHandler" value-ref="primaryPrincipalResolver" />
-->
<entry key-ref="dbAuthHandler" value-ref="primaryPrincipalResolver" />
</map>
</constructor-arg>
測試
嘗試訪問
https://sso.hoau.com:8433/cas
並使用我們在資料庫裡面預埋的資料"test01/psw01"登陸