本文在基於下文的基礎上做闡述:
企業CAS單點登錄案例
環境
操作系統:CentOS7.7
CAS服務端:192.168.142.155:8080(CAS服務端被部署在Tomcat上)
Mysql數據庫地址:192.168.8.104:3306 庫名:mysqldb 用戶名:root 密碼:123456
場景
-
個性化頁面
CAS的默認單點登錄頁:
這裏要實現的就是把自己系統的頁面作爲登錄頁 -
通過讀取用戶數據來驗證登錄
之前登錄CAS的賬號密碼默認是:賬號casuser 密碼Mellon,這裏要實現的就是通過讀取數據庫的用戶信息來完成認證。
更換CAS原有的登錄認證頁面
-
在CAS的工程下找到casLoginView.jsp文件,這個文件就是CAS默認的登錄認證頁面:
/data/soft/apache-tomcat-7.0.52/webapps/cas/WEB-INF/view/jsp/default/ui/casLoginView.jsp -
用需要替換的頁面文件覆蓋這個文件,文件名不變
-
把需要替換的頁面文件依賴的相關js,css文件拷貝到,相對於該頁面的正確路徑上
-
修改需要替換的頁面文件的下述幾個方面的內容,讓cas兼容這個頁面:
在頁面上引入標準標籤庫:<%@ page pageEncoding="UTF-8" %> <%@ page contentType="text/html; charset=UTF-8" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
在提交用戶名和密碼的表單元素上做如下修改:
<form:form method="post" id="fm1" commandName="${commandName}" htmlEscape="true" class="<你的樣式>"> ...... </form:form>
修改用戶名輸入框和密碼輸入框:
<form:input id="username" tabindex="1" accesskey="${userNameAccessKey}" path="username" autocomplete="off" htmlEscape="true" placeholder="用戶名/手機號" class="<你的樣式>"/>
<form:password id="password" tabindex="2" path="password" accesskey="${passwordAccessKey}" htmlEscape="true" autocomplete="off" placeholder="請輸入密碼" class="<你的樣式>" />
修改登錄按鈕
<input type="hidden" name="lt" value="${loginTicket}" /> <input type="hidden" name="execution" value="${flowExecutionKey}" /> <input type="hidden" name="_eventId" value="submit" /> <input class="<你的樣式>" accesskey="l" value="登陸" type="submit" />
通過讀取數據庫用戶數據來驗證登錄
-
修改cas工程下的deployerConfigContext.xml(/data/soft/apache-tomcat-7.0.52/webapps/cas/WEB-INF/deployerConfigContext.xml) ,添加如下配置:
dataSource是連接數據庫的相關配置,數據源用的是c3p0。
passwordEncoder是解決密碼加密的bean。此處加密算法用的MD5-32位小寫。
dbAuthHandler是驗證用戶的時候,解決如何獲取用戶密碼的問題,注意sql根據實際情況來寫<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" p:driverClass="com.mysql.jdbc.Driver" p:jdbcUrl="jdbc:mysql://192.168.8.104:3306/mysqldb?characterEncoding=utf8" p:user="root" p:password="123456" /> <bean id="passwordEncoder" class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder" c:encodingAlgorithm="MD5" p:characterEncoding="UTF-8" /> <bean id="dbAuthHandler" class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler" p:dataSource-ref="dataSource" p:sql="select password from tb_user where username = ?" p:passwordEncoder-ref="passwordEncoder"/>
2.修改deployerConfigContext.xml裏的authenticationManager這個bean
<bean id="authenticationManager" class="org.jasig.cas.authentication.PolicyBasedAuthenticationManager"> <constructor-arg> <map> <entry key-ref="proxyAuthenticationHandler" value-ref="proxyPrincipalResolver" /> <!--註釋掉原來的,修改成上面配的dbAuthHandler--> <!-- <entry key-ref="primaryAuthenticationHandler" value-ref="primaryPrincipalResolver" />--> <entry key-ref="dbAuthHandler" value-ref="primaryPrincipalResolver" /> </map> </constructor-arg> ......
3.把需要的依賴拷到cas工程下:
/data/soft/apache-tomcat-7.0.52/webapps/cas/WEB-INF/lib
包括有:
c3p0-0.9.1.2.jar
cas-server-support-jdbc-4.0.0.jar
mysql-connector-java-5.1.32.jar
4.重啓tomcat,通過客戶端登錄,做驗證