CAS單點登錄——實現個性化頁面,通過讀取用戶數據來驗證登錄

本文在基於下文的基礎上做闡述:
企業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原有的登錄認證頁面

  1. 在CAS的工程下找到casLoginView.jsp文件,這個文件就是CAS默認的登錄認證頁面:
    /data/soft/apache-tomcat-7.0.52/webapps/cas/WEB-INF/view/jsp/default/ui/casLoginView.jsp

  2. 用需要替換的頁面文件覆蓋這個文件,文件名不變

  3. 把需要替換的頁面文件依賴的相關js,css文件拷貝到,相對於該頁面的正確路徑上

  4. 修改需要替換的頁面文件的下述幾個方面的內容,讓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" />
    

通過讀取數據庫用戶數據來驗證登錄

  1. 修改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,通過客戶端登錄,做驗證

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章