官网:http://jasig.github.io/cas/
Cas Server下载:http://developer.jasig.org/cas/
Cas Client下载:http://developer.jasig.org/cas-clients/
测试环境:
jdk:java version "1.8.0_60"
tomcat:apache-tomcat-7.0.65
CAS Server:cas-server-4.0.0-release.zip
CAS Client:cas-client-3.1.12-release.zip
首先安装jdk、Tomcat ,这里安装不作介绍。
进入正题:
1、使用java keytool工具为系统生成https证书,并为系统注册
一、生成证书文件
keytool -genkey -alias asq -keyalg RSA -keystore g:/keys/asqjava
二、导出证书文件
keytool -export -file g:/keys/asq.crt -alias asq -keystore g:/keys/asqgit
![]()
|
生成到指定目录下的两个文件github
![]()
|
三、将证书导入到客户端JRE中(注意、是导入JRE中),若是security中已经存在cacerts,须要先将其删除。
keytool -import -keystore "C:\Program Files\Java\jdk1.8.0_131\jre\lib\security\cacerts" -file g:/keys/asq.crt -alias asqweb
![]()
|
2、配置服务器端 (单独放到一个Tomcat中 ,端口号8080,并进行以下配置)
一、从http://developer.jasig.org/cas/上下载cas服务器端cas-server-4.0.0-release.zip,在modules目录下找到cas-server-webapp-4.0.0.war,
将其复制到%TOMCAT_HOME%\webapps下,并将名称改成cas.warapache
![]()
|
二、修改%TOMCAT_HOME%\conf\server.xml文件,添加如下代码
tomcat
<!--keystoreFile 生成的证书文件 keystorePass 秘钥库密码 --> <Connector SSLEnabled="true" clientAuth="false" keystoreFile="F:/keys/castest" keystorePass="123456" maxThreads="150" port="8443" protocol="org.apache.coyote.http11.Http11Protocol" scheme="https" secure="true" sslProtocol="TLS"/> |
三、启动Tomcat,测试:https://localhost:8443/ 服务器
![]()
|
若是能够正常访问,说明证书安装成功session
![]()
|
4.访问https://localhost:8443/cas/login,出现如下画面:
app
![]()
|
输入帐号和密码
casuser
Mellon
登陆以后:webapp
![]()
|
此时说明服务器端已经配置成功。可经过https://localhost:8443/cas/logout退出登陆
3、配置cas client 客户端(单独一个Tomcat服务器,注意与cas server 的服务器端口号不要冲突,这里默认改为18080)
一、建立maven web项目 cas-client1。(以前已经建立一个,要部署多个client ,因此建立cas-client2)
![]()
|
建立出简单的一个web项目,只有一个index.jsp页面 ,如下是client2的目录结构
![]()
|
二、在pom.xml文件中添加cas-client 的依赖(能够手动添加,将从http://developer.jasig.org/cas-clients/上下载cas-client-3.1.12-release.zip,
在modules目录下找到cas-client-core-3.1.12.jar、commons-collections-3.2.jar、commons-logging-1.1.jar复制到项目WEB-INF/lib下)
pom.xml添加如下代码:
<dependency> <groupId>org.jasig.cas</groupId> <version>3.1.1</version> <artifactId>cas-client-core</artifactId> </dependency> |
三、在cas-client2项目的web.xml中配置cas 的过滤器
<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>/CasClient/*</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> <!--这里是搭建的 cas server 服务端的IP--> <param-value>https://sso.castest.com:8443/cas/login</param-value> </init-param> <init-param> <param-name>serverName</param-name> <param-value>http://localhost:18080</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.castest.com:8443/cas</param-value><!-- 此处必须为登陆url/cas/,带有任何其它路径都会报错,如“https://sso.castest.com:8443/cas/login”,这样也会报错。 --> </init-param> <init-param> <param-name>serverName</param-name> <!--这里注意url 的路径,sso.client1.com 在host文件中配置对应的127.0.0.1 端口号必定要与启动Tomcat服务器的端口一致,通常cas server 服务器单独部署, --> <param-value>http://sso.client1.com:18080</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> <!-- ======================== 单点登陆结束 ======================== --> <!-- session超时定义,单位为分钟 --> <session-config> <session-timeout>2</session-timeout> </session-config> |
四、在index.jsp中添加随意标识,用于区分不一样的应用程序
![]()
|
五、利用maven打包工具,将项目打压成一个war包,在这里注意:jar包的名称就是对应访问的端口号后面的项目名
在这里使用IDEA的maven工具,点击 package生成war包
![]()
|
在target目录中生成了咱们须要的war包
![]()
|
六、将该war包放到cas client Tomcat中的webapps中
![]()
|
七、修改Tomcat目录下的conf中server.xml ,将端口号改成18080 ,具体修改以下:
<Server port="18005" shutdown="SHUTDOWN"> <Connector port="18080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> <Connector port="18009" protocol="AJP/1.3" redirectPort="8443" /> <!---注意redirectPort 重定向端口号,必须跟cas server的端口号一致--> |
八、启动cas-client 的Tomcat 服务器
![]() |
九、先访问 url1 :localhost:18080/cas-client1/index.jsp
而后访问url2: localhost:18080/cas-client2/index.jsp
当访问url1的时候,成功跳转到cas server服务器上
![]()
|
登陆验证以后 ,成功跳转到client1的index.jsp页面
![]()
|
当访问url1 而且登陆成功后 ,而后访问url2 ,就不须要再次验证身份,直接跳转到client2的index.jsp页面
![]()
|
一个最简单的单点登陆至此所有完成