CAS单点登陆系列:html
CAS 5.1.x 的搭建和使用(一)—— 经过Overlay搭建服务端 CAS 5.1.x 的搭建和使用(二)—— 经过Overlay搭建服务端-其它配置说明 CAS 5.1.x 的搭建和使用(三)—— 官方示例来熟悉客户端搭建 CAS 5.1.x 的搭建和使用(四)—— 配置使用HTTP协议访问的服务端
这里主要有两件事要作:java
第一个就是给客户端的jre添加和服务端对应的证书git
以前咱们已经生成了一个keystore,咱们就直接使用这个keystore生成一个证书,命令以下:github
keytool -exportcert -alias cas -keystore D:/liuyx.keystore -file D:/liuyx.keystore.cer -storepass 123456
而后把这个证书导入jre的web
注意,这个jre必定要是你跑客户端的Tomcat的那个jre,api
这里个人目录是:C:/Java/jdk1.8.0_91/jre/lib/security/cacerts,刚刚导出的证书的目录是D:/liuyx.keystore.cer浏览器
那么个人命令就是:服务器
keytool -import -alias cas -keystore C:/Java/jdk1.8.0_91/jre/lib/security/cacerts -file D:/liuyx.keystore.cer
证书库的密码是:changeitjava-web
导入完咱们能够看一下导入的结果:session
keytool -list -keystore C:/Java/jdk1.8.0_91/jre/lib/security/cacerts
密码同上,能够看到一堆证书,其中有一个“别名”是cas的,日期是今天,就是咱们刚刚导进去的。
当咱们作完这一切CAS实验后,也许你会想要删掉这个证书,可使用这个命令:
keytool -delete -alias cas -keystore C:/Java/jdk1.8.0_91/jre/lib/security/cacerts
接下来就是跑官网的示例了
官网例子地址:
https://github.com/cas-projects/cas-sample-java-webapp
咱们先把它下下来,结构以下
能够看到里面内置了jetty,不过我是经过idea中的Tomcat运行的,我把它导入了idea。
而后就是咱们的正题了,配置修改:
一、pom.xml
在pom里面加上如下内容:
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.25</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.25</version> </dependency>
二、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"> <!--用来控制cas识别的session的保存,以及判断是不是登出请求--> <filter> <filter-name>CAS Single Sign Out Filter</filter-name> <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class> <init-param> <param-name>casServerUrlPrefix</param-name> <!--这个地址要和keystore中的CN一致,端口无所谓,域名必须一致,前边我在hosts里面配置了这个域名映射,因此实际上访问的是127.0.0.1--> <param-value>https://cas.example.org:8443</param-value> </init-param> </filter> <listener> <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class> </listener> <!--用来跳转登陆--> <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> <!--这个地址要和keystore中的CN一致,端口无所谓,域名必须一致,前边我在hosts里面配置了这个域名映射,因此实际上访问的是127.0.0.1--> <param-value>https://cas.example.org:8443/login</param-value> </init-param> <init-param> <param-name>serverName</param-name> <!--这是你客户端的部署地址,认证时会带着这个地址,认证成功后会跳转到这个地址--> <param-value>http://localhost:8080</param-value> </init-param> </filter> <!--用来验证ticket--> <filter> <filter-name>CAS Validation Filter</filter-name> <filter-class>org.jasig.cas.client.validation.Cas30ProxyReceivingTicketValidationFilter</filter-class> <init-param> <param-name>casServerUrlPrefix</param-name> <!--这个地址要和keystore中的CN一致,端口无所谓,域名必须一致,前边我在hosts里面配置了这个域名映射,因此实际上访问的是127.0.0.1--> <param-value>https://cas.example.org:8443</param-value> </init-param> <init-param> <param-name>serverName</param-name> <!--这是你客户端的部署地址,验证ticket成功后会跳转到这个地址--> <param-value>http://localhost:8080</param-value> </init-param> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>redirectAfterValidation</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>useSession</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>authn_method</param-name> <param-value>mfa-duo</param-value> </init-param> </filter> <!--用来封装request--> <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 Single Sign Out Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <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>
总共四个过滤器和一个监听器,大部分都在文件内容中注释说明了,本身看一下吧。
客户端应用跑起来,会先跳转到CAS服务器登陆页,登陆成功后会跳转到首页index.jsp,里面就是获取了全部你能够从CAS服务器获取的属性,若是你前面没有配置多属性获取,那么只有一个默认的id,和一些其余cas自带的属性。
关于如何在代码里得到这些属性,这个index.jsp 的代码里已经写的很是清楚了,本身去看一下便可。
最后建议你们作完这些以后本身打开谷歌浏览器的F12,勾选上Preserve log
经过正常的登录来看一下页面跳转流程,结合下边这个地址,弄明白TGC、TGT、ST三个概念: