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,通过客户端登录,做验证

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