本文在基于下文的基础上做阐述:
企业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,通过客户端登录,做验证