单点登录cas之服务器端搭建

一,使用版本

 版本: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&amp;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>

猜你喜欢

转载自blog.csdn.net/weixin_39806100/article/details/83718176