搭建环境
·JDK8
·Tomcat9
·cas-server4.0
·MySQL5
·c3p0-0.9.1.2.jar
·cas-server-support-jdbc-4.0.0.jar
·mysql-connector-java-5.1.32.jar
注:如果是按照本教程学习搭建的话,最好版本与本教程中的的版本一致,如果版本不一致,很有可能使项目无法运行或达到预期的效果。
1.服务端配置
1.1.打开命令行,输入以下命令,导出证书
C:\Windows\system32>keytool -genkey -alias castest -keyalg RSA -keystore E:/casKey.keystore
按下图配置

1.2.输入以下命令,导出crt文件
C:\Windows\system32>keytool -export -file E:/casKey.crt -alias castest -keystore E:/casKey.keystore
如下图

1.3.导入证书
将生成的证书导入运行的jdk中
C:\Windows\system32>keytool -import -keystore "D:\Java\jdk1.8.0_92\jre\lib\security\cacerts" -file E:/casKey.crt -alias castest
如下图

1.4.添加域名映射
将生成的证书文件casKey.crt拷贝到JDK/bin下,在C:/Windows/System32/drivers/etc/hosts中添加域名映射,内容如下
127.0.0.1 sso.test.com
1.5.配置Tomcat环境
将cas-server-4.0.0-release/cas-server-4.0.0/modules/cas-server-4.0.0.war复制到Tomcat/webapps下并重命名为cas.war
打开tomcat/server.xml,增加如下内容。keystoreFile为casKey.keystore的路径,keystorePass为前面设置的口令。
<Connector port="8086" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" keystoreFile="E:/casKey.keystore" keystorePass="cas123" />
1.6.启动tomcat
在地址栏输入 https://localhost:8086/cas/login ,出现如下图界面。

1.7.登录
输入默认账号/密码:casuser/Mellon。用户名和密码是cas-server-4.0.0-release/cas-server-4.0.0/cas-server-webapp/src/main/webapp/WEB-INF/deployerConfigContext.xml中的

1.8.注销登录
访问https://localhost:8086/cas/logout,注销登录

2.客户端配置
2.1.maven新建web项目CASClient1。
在pom.xml文件中导入需要的jar包
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.cas</groupId>
<artifactId>CASClient1</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>CASClient1 Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!-- cas -->
<dependency>
<groupId>org.jasig.cas.client</groupId>
<artifactId>cas-client-core</artifactId>
<version>3.3.3</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<finalName>CASClient1</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<configuration>
<!-- 指定端口 -->
<port>9001</port>
<!-- 请求路径 -->
<path>/</path>
</configuration>
</plugin>
</plugins>
</build>
</project>
在web.xml中加入需要的监听
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>Archetype Created Web Application</display-name>
<!-- 用于单点退出,该过滤器用于实现单点登出功能,可以选配 -->
<listener>
<listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
</listener>
<!-- 该过滤器用于实现单点登出功能,可选配 -->
<filter>
<filter-name>CAS Single Sign Out Filter</filter-name>
<filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CAS Single Sign Out Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 该过滤器负责用户的认证工作,必须启用 -->
<filter>
<filter-name>CASFilter</filter-name>
<filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
<init-param>
<param-name>casServerLoginUrl</param-name>
<param-value>https://sso.test.com:8086/cas/login</param-value>
<!-- 这里的Server是服务端的IP -->
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>http://localhost:9100</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CASFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 该过滤器负责对Ticket的校验工作,必须启用 -->
<filter>
<filter-name>CAS Validation Filter</filter-name>
<filter-class>org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class>
<init-param>
<param-name>casServerUrlPrefix</param-name>
<param-value>https://sso.test.com:8086/cas</param-value>
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>http://localhost:9100</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CAS Validation Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 该过滤器负责实现HttpServletRequest请求的包裹,比如允许开发者通过 HttpServletRequest的getRemoteUser()方法获得SSO登录用户的用户名,可选配-->
<filter>
<filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
<filter-class>org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 该过滤器使得开发者通过org.jasig.cas.client.util.AssertionHolder来获取用户的登录名,
比如AssertionHolder.getAssertion().getPrincipal().getName() -->
<filter>
<filter-name>CAS Assertion Thread Local Filter</filter-name>
<filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CAS Assertion Thread Local Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
编写index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>小软认证</title>
</head>
<body>
欢迎登录小软二手市场平台
<%=request.getRemoteUser() %>
</body>
</html>
2.2.按照以上步骤新建CASClient2。
运行服务端
将客户端部署到服务器,运行客户端(注意:客户端和服务端分别在两个服务器上)
在地址栏输入http://localhost:9100/CASClient1/ ,页面跳转到服务端登录页,输入用户名/密码,页面进入客户端1欢迎页面。
在地址栏输入http://localhost:9100/CASClient2/ ,页面直接进入客户端2欢迎页面。
3.单点退出
修改配置文件使单点退出后跳转到指定页面,修改cas系统的配置文件cas-servlet.xml文件
<bean id="logoutAction" class="org.jasig.cas.web.flow.LogoutAction"
p:servicesManager-ref="servicesManager"
p:followServiceRedirects="${cas.logout.followServiceRedirects:true}"/>
将参数改为true后,可以在退出时跳转到目标页面,修改index.jsp的退出链接
<a href="http://localhost:9100/cas/logout?service=http://www.baidu.com">退出登录</a>
至此,CAS单点登录就搭建完成了。
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!