在Tomcat上配置CAS 自己的体验
演示环境
本文演示过程在同一个机器上的(也可以在三台实体机器或者三个的虚拟机上),环境如下:
- windows732位
- JDK 1.6.0_18
- Tomcat 6.0.29
- CAS-server-3.4.11、CAS-client-3.2.1
根据演示需求,用修改hosts 文件的方法添加域名,在文件 C:\Windows\System32\drivers\etc\hosts 文件中添加三条
127.0.0.1 localhost1
127.0.0.1 localhost2
127.0.0.1 sunhan(这个在生成证书的时候用的上,由于一开始不知道就随便写了,后来才知道这个地方后面要用的到)
sunhan =>>对应部署cas server的tomcat,这个虚拟域名还用于证书生成
localhost1 =>> 对应部署app1的tomcat
localhost2 =>>对应部署app2的tomcat
生成证书
在C盘根目录下建立子文件夹“Keys”,用于存放证书。
单击“开始 -> 运行",输入“cmd”,单击“确定”启动命令提示符窗口。
输入“cd "c:\Program Files\Java\jre7\bin"”进入jre7的bin目录下。
执行命令“keytool -genkey -alias tomcat -keyalg RSA -storepass changeit -keystore F:\SSO\keys\.keystore -validity 3600”创建证书。如图:
注:1.要提前建好目录:F:\SSO\keys
2.changeit 就是你要的密码,在后续的配置文件中会用到这个。
3.sunhan 此处就是当作服务器端域名
将证书导入的JDK的证书信任库中
第一步:导出证书。
执行命令“keytool -export -trustcacerts -alias tomcat -file F:\SSO\keys\tomcat.cer -keystore F:\SSO\keys\.keystore -storepass changeit”将证书导出到Keys文件夹。
第二步:将证书导入到JDK证书信任库。
执行命令“keytool -import -trustcacerts -alias tomcat -file F:\SSO\keys\tomcat.cer -keystore "C:\Program Files\Java\jre7\lib\security\cacerts" -storepass changeit”。系统询问是否信任此证书,回答“y”。
注:想我,可能测试两边的,他会提示证书已经存在,请用下面第二个方法进行证书删除
其他有用keytool命令(列出信任证书库中所有已有证书,删除库中某个证书):
keytool -list -v -keystore "C:\Program Files\Java\jre7\lib\security\cacerts"
keytool -delete -trustcacerts -alias tomcat -keystore "C:\Program Files\Java\jre7\lib\security\cacerts" -storepass changeit
配置server.xml文件
以管理员身份运行文字编辑器,打开%TOMCAT_HOME%\conf\server.xml。查找SSL配置并将如下内容插入其中。
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="F:/SSO/keys/.keystore"
keystorePass="changeit" />
然后启动该路径下的tomcat ,分别测试“http://demo:8080”和“https://demo:8443/”
安装 CAS
解压缩下载下来的“cas-server-3.5.1-release.zip”,
在“modules”文件夹中找到“cas-server-webapp-3.5.1.war”,将其重命名为“cas.war”
将“cas.war”拷贝到“%TOMCAT_HOME%\webapps”(这里要注意一下,我是没有设置这个环境变量的,为了测试SSO,用的新建的tomcat的)文件夹下。稍等一会儿刷新一下,就会看到Tomcat自动将“cas.war”解压到“cas”文件夹中。如下图:
测试 CAS
在默认配置下,CAS认为只要用户名密码相同即登录成功。我们可以通过修改配置以实现基于数据库的身份验证。不过目前我们先以默认配置进行测试。
在浏览器中输入网址“https://demo:8443/cas/login”,如果IE有证书警告信息,直接点击“继续浏览此网站(不推荐)。
如果用户名与密码相同,则系统显示登录成功:
部署CAS-Client相关的Tomcat
Cas-Client下载
CAS-Client下载地址:http://downloads.jasig.org/cas-clients/
以cas-client-3.2.1-release.zip为例,解压提取cas-client-3.2.1/modules/cas-client-core-3.2.1.jar
借以tomcat默认自带的webapps\examples 作为演示的简单web项目
安装配置tomcat-app1
解压apache-tomcat-6.0.29.tar.gz并重命名后的路径为F:\SSO\tomcat1,修改tomcat的启动端口(共计5处),在文件conf/server.xml文件找到如下内容:
<Serverport="8005" shutdown="SHUTDOWN"> <Connectorport="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> <Connectorport="8009" protocol="AJP/1.3"redirectPort="8443" />
修改成如下:
<Serverport="18005" shutdown="SHUTDOWN"> <Connectorport="18080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="18443" /> <Connectorport="18009" protocol="AJP/1.3"redirectPort="18443" />
启动tomcat1,浏览器输入http://localhost1:18080/examples/servlets/回车:
接下来复制client的lib包cas-client-core-3.2.1.jar和commons-logging-1.1.jar到 tomcat1\webapps\examples\WEB-INF\lib\目录下,在tomcat1\webapps\examples\WEB-INF\web.xml 文件中增加如下内容:
<!-- ======================== 单点登录开始 ======================== -->
<!-- 用于单点退出,该过滤器用于实现单点登出功能,可选配置 -->
<listener>
<listener-class>org.jasig.cas.cl"F:/SSO/tomcat1/webapps/examples/WEB-INF/web.xml"ient.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://localhost:8443/cas/login</param-value>
<!--这里的server是服务端的IP -->
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>https://localhost:8443</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://localhost:8443/cas</param-value>
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>https://localhost:8443</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> <!-- ======================== 单点登录结束 ======================== -->
有关cas-client的web.xml修改的详细说明见官网介绍:
https://wiki.jasig.org/display/CASC/Configuring+the+Jasig+CAS+Client+for+Java+in+the+web.xml
同样的方式部署一个tomcat2
七、 测试验证SSO
启动之前配置好的三个tomcat分别为:tomcat-cas、tomcat-app1、tomcat-app2.
7.1 基本的测试
预期流程:打开app1 url —->跳转cas server验证 —->显示app1的应用 —->打开app2 url —->显示app2应用 —->注销cas server —->打开app1/app2url —->重新跳转到cas server验证.
打开浏览器地址栏中输入:http://localhost:18080/examples/servlets/servlet/HelloWorldExample
这里要注意一点:服务器端的jdk 和 客户端的jdk要指定不同的
本文所有知识都是通过一下博客获取。再次感谢他
http://www.micmiu.com/lang/java/keytool-start-guide/
在Tomcat上配置CAS 自己的体验的更多相关文章
- Tomcat上配置连接池{ connect error=Name [jdbc/OracleDB] is not bound in this Context. Unable to find [jdbc]}
. 在学习期间,从未实践过在tomcat上配置连接池,今天终于实现一次,在tomcat玩了一把,不知道你是否现在有和我一样的困境.废话少说直接上代码 java public static Con ...
- 在 Tomcat 上配置虚拟主机
.Tomcat 服务器的server.xml文件 (1)Tomcat 组件 Tomcat服务器是由一系列可配置的组件构成,其中核心组件是 Catalina Servlet 容器,它是所有其他 To ...
- tomcat 分别在window 和 Linux上配置SSL-安全问题
公司项目收尾后.通过压力測试后的安全測试.安全測试后中,对于网络传输中数据加密问题存在安全隐患. 须要配置SSL. 简介下SSL协议:SSL或者Secure Socket Layer,是一种同意web ...
- 如何利用tomcat和cas实现单点登录(2):配置cas数据库验证和cas客户端配置
接(1),上一篇主要讲述了tomcat和cas server端的部署. 接下来主要还有两个步骤. 注意:为了开启两个tomcat,要把直接配置的tomcat的环境变量取消!!!!!!!!!! 客户端配 ...
- CAS (1) —— Mac下配置CAS到Tomcat(服务端)(转)
tomcat版本: tomcat-8.0.29 jdk版本: jdk1.8.0_65 cas版本: cas4.1.2cas-client-3.4.1 参考来源: CAS实现单点登录(SSO)经典完整教 ...
- CAS (1) —— Mac下配置CAS到Tomcat(服务端)
CAS (1) -- Mac下配置CAS到Tomcat(服务端) tomcat版本: tomcat-8.0.29 jdk版本: jdk1.8.0_65 cas版本: cas4.1.2 cas-clie ...
- CAS (3) —— Mac下配置CAS客户端经代理访问Tomcat CAS
CAS (3) -- Mac下配置CAS客户端经代理访问Tomcat CAS tomcat版本: tomcat-8.0.29 jdk版本: jdk1.8.0_65 nginx版本: nginx-1.9 ...
- CAS (2) —— Mac下配置CAS到Tomcat(客户端)
CAS (2) -- Mac下配置CAS到Tomcat(客户端) tomcat版本: tomcat-8.0.29 jdk版本: jdk1.8.0_65 cas版本: cas4.1.2 cas-clie ...
- 在同一台服务器上配置多个Tomcat
如果要在一台服务器上配置多个Tomcat,主要就是要避免Tomcat服务器的端口冲突的问题.只需要修改CATALINA_HOME\conf\server.xml中的启动端口和连接端口就OK了! 下面我 ...
随机推荐
- jquery——ajax加载后的内容,单击事件失效
使用delegate(),on()绑定事件,可以将事件绑定到其祖先元素上,这样以后加载出来的元素,单击事件仍然有效
- php获取数组中重复数据的两种方法
分享下php获取数组中重复数据的两种方法. 1,利用php提供的函数,array_unique和array_diff_assoc来实现 <?php function FetchRepeatMem ...
- 手把手教你写LKM rookit! 之 第一个lkm程序及模块隐藏(一)
唉,一开始在纠结起个什么名字,感觉名字常常的很装逼,于是起了个这<手把手教你写LKM rookit> 我觉得: 你们觉得:...... 开始之前,我们先来理解一句话:一切的操作都是系统调用 ...
- s3c-u-boot-1.1.6源码分析
源码 源码结构 移植准备
- 巧用system函数个性化屏幕显示
函数名:system 功 能: 发出一个DOS命令 用 法: system("DOS命令"); (system函数需加头文件<stdlib.h&g ...
- 九度OJ - 题目1481:Is It A Tree?
题目描述: A tree is a well-known data structure that is either empty (null, void, nothing) or is a set o ...
- linux工作队列
工作队列一般用来做滞后的工作,比如在中断里面要做很多事,但是比较耗时,这时就可以把耗时的工作放到工作队列.说白了就是系统延时调度的一个自定义函数. 工作队列是实现延迟的新机制,从 2.5 版本 Lin ...
- 【BZOJ 1003】 [ZJOI2006]物流运输trans
Description 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的运输路线,以便对整个运输过程实施严格 ...
- 简单的SQL Server在线查看和执行系统
在大的公司里面,往往数据库和表都非常的多,一张表的字段也是会有几十个.如果这么多的表和字段没有说明注释的话,查看起来会一头雾水,新来的或者别的部门的同事看到表和字段会完全不知道是干嘛的,只能靠名称来猜 ...
- jQuery树结构插件推荐zTree
JQuery zTree 下载地址http://plugins.jquery.com/zTree.v3/