一,使用版本
版本:cas-server-3.4.11-release.zip。
下载地址:https://github.com/apereo/cas/releases?after=v3.4.11。
jdk:1.7。(只能在jdk1.7环境下使用)
二,修改验证方式
①,WEB-INF/deployerConfigContext.xml文件修改
<!-- 配置数据源 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver" />
<property name="jdbcUrl" value="jdbc:mysql://127.0.0.1:3306/xh?useUnicode=true&characterEncoding=UTF-8" />
<property name="user" value="root" />
<property name="password" value="root" />
</bean>
<!-- md5加密 -->
<bean id="passwordEncoder" class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder" autowire="byName">
<constructor-arg value="MD5"/>
</bean>
<bean id="authenticationManager" class="org.jasig.cas.authentication.AuthenticationManagerImpl">
<property name="credentialsToPrincipalResolvers">
<list>
<bean class="org.jasig.cas.authentication.principal.UsernamePasswordCredentialsToPrincipalResolver" />
<bean class="org.jasig.cas.authentication.principal.HttpBasedServiceCredentialsToPrincipalResolver" />
</list>
</property>
<property name="authenticationHandlers">
<list>
<bean class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler"
p:httpClient-ref="httpClient" />
<!-- <bean class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" /> -->
<!-- 使用数据库验证 -->
<bean id="dbAuthHandler" class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler"
p:dataSource-ref="dataSource"
p:sql="SELECT u.`password` FROM `user` u WHERE u.`account` = ?"
p:passwordEncoder-ref="passwordEncoder"/>
</list>
</property>
</bean>
②,jar包添加(访问数据库需要的jar包)
百度网盘下载:https://pan.baidu.com/s/1tR_uXcnfvlQYT8l-dt88tA
放在cas\WEB-INF\lib目录下
三,修改为使用http方式
①修改WEB-INF/deployerConfigContext.xml文件。
<property name="authenticationHandlers"> <list> <bean class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler" p:httpClient-ref="httpClient" p:requireSecure="false"/> <!-- <bean class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" /> --> <!-- 使用数据库验证 --> <bean id="dbAuthHandler" class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler" p:dataSource-ref="dataSource" p:sql="SELECT u.`password` FROM `user` u WHERE u.`account` = ?" p:passwordEncoder-ref="passwordEncoder"/> </list> </property> </bean>
②,修改WEB-INF/spring-configuration/ticketGrantingTicketCookieGenerator.xml。
<bean id="ticketGrantingTicketCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator" p:cookieSecure="false" p:cookieMaxAge="-1" p:cookieName="CASTGC" p:cookiePath="/cas" />
③,修改WEB-INF/spring-configuration/warnCookieGenerator.xml。
<bean id="warnCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator" p:cookieSecure="false" p:cookieMaxAge="-1" p:cookieName="CASPRIVACY" p:cookiePath="/cas" />
四,退出支持自定义地址。
修改WEB-INF/cas-servlet.xml
<bean id="logoutController" class="org.jasig.cas.web.LogoutController" p:centralAuthenticationService-ref="centralAuthenticationService" p:logoutView="casLogoutView" p:warnCookieGenerator-ref="warnCookieGenerator" p:ticketGrantingTicketCookieGenerator-ref="ticketGrantingTicketCookieGenerator" p:followServiceRedirects="true" />
五,登录页面改造
位置:\WEB-INF\view\jsp\default\ui\casLoginView.jsp
效果图
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="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" %>
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="Generator" content="EditPlus®">
<meta name="Author" content="">
<meta name="Keywords" content="">
<meta name="Description" content="">
<title>登录</title>
<style>
*{
margin:0px;
padding:0px;
}
input{
outline:none;
border-radius:2px;
border:0;
height:35px;
width:260px;
box-shadow: 0px 0px 1px 0px #999;
}
.red-border{
border:1px solid red;
}
.red-color{
color:red;
}
.login-box{
width:420px;
height:280px;
margin:100px auto;
border-radius:5px;
box-shadow: 0px 0px 5px 0px #999;
}
.login-box div{
text-align:center;
line-height:68px;
}
.login-box div:nth-child(1){
border-bottom:1px dashed #ccc;
line-height:55px;
}
.login-box .btn{
width:280px;
color:#0099CC;
background:#fff;
border:1px solid #0099CC;
}
.login-box .btn:hover{
width:280px;
color:#fff;
background:#0099CC;
}
</style>
</head>
<body>
<div class="login-box">
<form:form method="post" id="fm" commandName="${commandName}" htmlEscape="true">
<div id="title">登录</div>
<form:errors path="*" id="msg" style="display:none"/>
<div>
账号:<input type="text" id="username" name="username" value="${param.username}" placeholder="请输入账号"/>
</div>
<div>
密码: <input type="password" id="password" name="password" value="${param.password}" placeholder="请输入密码"/>
</div>
<div>
<input type="hidden" name="lt" value="${loginTicket}" />
<input type="hidden" name="execution" value="${flowExecutionKey}" />
<input type="hidden" name="_eventId" value="submit" />
<input class="btn" id="btn" accesskey="l" value="登录" type="button" />
</div>
</form:form>
</div>
</body>
<script>
var title = document.getElementById("title");
var btn = document.getElementById("btn");
var msg = document.getElementById("msg");
if(msg&&msg.innerHTML!=""){
title.innerHTML = msg.innerHTML.indexOf("您提供的凭证有误")!=-1 ? "用户名或密码错误" : msg.innerHTML;
title.className = "red-color";
}
btn.onclick = function(){
var username = document.getElementById("username");
var password = document.getElementById("password");
username.className="";
password.className ="";
if(username.value==""){
username.focus();
username.className ="red-border";
return;
}else if(password.value==""){
password.focus();
password.className ="red-border";
return;
}
var fm = document.getElementById("fm");
fm.submit();
}
</script>
</html>