参考文章
1、http://blog.csdn.net/chenhai201/article/details/50623395
2、http://blog.csdn.net/diyagea/article/details/50639911
3、http://www.cnblogs.com/lr393993507/p/5231432.html
4、http://www.cnblogs.com/notDog/p/5276638.html
1、前期准备
tomcat ,jdk,cas服务端,cas客户端
2、生成证书 (重新生成需要把以前的都删掉)
keytool -genkey -alias lovez -keyalg RSA -keystore D:/keys/lovez ( 在这里定义了别名 lovez,下面会用到,前后一致,否则报错)
下面的姓氏要注意,是你的域名,
否则报错
java.security.cert.CertificateException: No name match
这里注意一下 "-alias"后边的第一个"colorb",这里只是一个别名,最后一个"colorb",指的是keysotre的名称。
其中名字与姓氏这一最好写你的 域名,如果在单击测试你可以在文件中映射一个虚拟域名:
3、导出证书
继续小黑窗,keytool -export -file d:/keys/colorb.crt -alias colorb -keystore d:/keys/lovez(此处的别名上面定义的)
4、把证书导入到客户端jdk
依旧是小黑窗,输入keytool -import -keystore D:\Program Files\Java\jdk1.7.0_13\jre\lib\security\cacerts -file D:/keys/colorb.crt -alias colorb
上面方式报错
网上解决方案:再用cd进入到C:\jdk1.5\jre\lib\security这个目录下
敲入如下命令回车执行
keytool -import -alias cacerts -keystore cacerts -file D:/keys/colorb.crt -alias lovez(如果security存在cacerts删掉,否则报错,)
5、安装服务端
1、部署war包
我们把下载下来的CAS Service解压后,到cas-server-3.3\modules目录,找到cas-server-webapp-3.3.war,把war包放到tomcat的%TOMCAT_HOME% \webapps下,当然,你最好改个名字,改啥都行,简单就好。
2、修改server.xml
接下来我们就要使用刚才生成的证书了,找到%TOMCAT_HOME%\conf\server.xml这个文件,打开并编辑之:
如果你的这个文件没改过的话,大概在80几行会找到以下注释
<!--
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" />
-->
我们把它修改一下,换下
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="D:/keys/colorb" truststoreFile="C:/Program Files/Java/jdk1.6.0_30/jre/lib/security/cacerts"
keystorePass="zw"/>
keystoreFile就是刚才生成的keystore文件
truststoreFile就是书嘛,刚才已经安装到jre里
keystorePass密码
3、访问服务端
好了,配置好了之后,可以访问http://lovez:8443/cas ,注意cas就是刚才刚的那个war包名字。
配置客户端
1、添加依赖
解压刚才下好的CAS Client包,里面会有cas-client-core-x.x.x.jar,不过还需要commons-logging-1.1.jar和servlet-api-2.3.jar,如果你觉得麻烦,直接用maven添加依赖吧,我就是那么做的:
<dependency>
<groupId>org.jasig.cas.client</groupId>
<artifactId>cas-client-core</artifactId>
<version>3.1.12</version>
</dependency>
2、配置web.xml
接下来就是要配置web.xml啦,主要是配置过滤器。
<web-app>
<display-name>CAS Web Application Demo</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://colorb:8443/cas/login</param-value>
<!--这里的server是服务端的IP,colorb其实最好是一个域名-->
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>http://colorb:8888</param-value><!--下边为啥也是colorb呢,其实是因为我都是我懒得设置其它名称而已,下边会用到color2这个名称-- >
</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://colorb:8443/cas</param-value>
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>http://colorb:8888</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>
好了,第一个客户端配置好了,接下来以同样的方式,配置第二个客户端,不过web.xml稍微有一点点不同的就是上边标黄的地址里的color换成color2,其实就是代表两个不同的域名嘛。注意上边标红的地址,它们都是指向同一个地址,即CAS服务端的地址,因为客户端访问的服务器是同一个的。
按如上配置,一般就成功了,如果你访问出错的话,证明你的客户端web.xml没有配置好,或者你的证书生成有问题,多加注意就好,我也错了不少次!
我配置的简单版
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<filter>
<filter-name>CAS Authentication Filter</filter-name>
<filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
<init-param>
<param-name>casServerLoginUrl</param-name>
<param-value>https://lovez:8443/cas/login</param-value>
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>http://lovez:8080/client</param-value>
</init-param>
</filter>
<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://lovez:8443/cas</param-value>
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>http://lovez:8080/client</param-value>
</init-param>
</filter>
<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 Validation Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CAS Authentication Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>
index.jsp
</welcome-file>
</welcome-file-list>
</web-app>
最后测试
输入域名
http://lovez:8080/client/index.jsp
会跳到服务端登录界面
输入账号密码回到客户端。
登录成功图
参考文档