文档章节

cas服务下单点登录

EDIAGD
 EDIAGD
发布于 2013/01/24 16:15
字数 1766
阅读 1791
收藏 15
点赞 0
评论 0

此文的目的是为了加深自己的理解,做一个备份与分享

过程全为自己的实际操作步骤

第一步:准备的环境

win7 64位的系统

jdk1.6.0_37

apache-tomcat-6.0.14

cas-server-3.4.8-release

cas-client-3.2.0-release

这里用到的是tomcat自带作为测试的程序

 

首先,找到系统的hosts文件( C:\Windows\System32\drivers\etc\hosts )增加

 

在本机映射三个域名

127.0.0.1   cas.baishi.com

127.0.0.1   app1.baishi.com

127.0.0.1   app2.baishi.com

解释,其中,cas.baishi.com对应部署cas server的tomcat ,这个域名对应证书的生成

app1.baishi.com对应部署app1应用的tomcat

app2.baishi.com对应部署app2应用的tomcat

第二步:部署cas的服务

(1)首先,我在D盘下建一个文件夹,如D:/baishikeys 接着用jdk自带的keytool生成证书,即在cmd命令中键入

keytool -genkey -alias baishi -keyalg RSA -keystore “D:/baishikeys/baishikey” 该命令生成keys证书

baishi为证书的别名,执行结果如下图,注意其中姓氏要写之前cas server对应的域名
(2)导出证书

keytool -export -file d:/baishikeys/baishi.crt -alias baishi -keystore d:/baishikeys/baishikey

执行结果如图(其中密码和上面证书密码一致)



(3)把证书导入JDK中

先找到你安装的jdk目录中cacerts文件删掉,如D:\Program Files\Java\jdk1.6.0_37\jre\lib\security\cacerts

这样的目的是避免后面报错

执行keytool -import -keystore "D:\Program Files\Java\jdk1.6.0_37\jre\lib\security\cacerts" -file D:/baishikeys/baishi.crt -alias baishi

执行结果如图(其中密码和上面一致就行)
 

第三步:配置cas的服务端

解压apache-tomcat-6.0.14重命名为apache-tomcat-cas

把下载的cas-server-3.4.8-release包解压,在文件modules中,找到cas-server-webapps-3.4.8.war

复制到apache-tomcat-cas的webapps文件夹下,重命名为 cas.war,打开apache-tomcat-cas的

conf/server.xml文件,

找到64到72中间的注释打开,改为

 <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"

               maxThreads="150" scheme="https" secure="true"

               clientAuth="false" sslProtocol="TLS" 

              keystoreFile="D:/baishikeys/baishikey"

              keystorePass="123456"

   />

其中keystoreFile是创建证书的路径,keystorePass是创建证书的密码,到此cas服务的配置完成

 

启动cas服务的apache-tomcat-cas,访问https://cas.baishi.com:8443/cas

执行图:点击继续浏览此网站

执行后图

用户名和密码输入相同的字符串就可以通过了

到此cas服务端的配置成功了

第四步:配置cas的客户端

(1) 安装配置 apache-tomcat-app1

解压apache-tomcat-6.0.14 .tar,改名为apache-tomcat-app1对应应用app1的服务

修改apache-tomcat-app1的启动端口,在文件conf/server.xml文件找到如下内容:

 

<Connector port="8080" protocol="HTTP/1.1"
                 connectionTimeout="20000"
                 redirectPort="8443" />
  <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

改成

 

<Connector port="18080" protocol="HTTP/1.1"
                connectionTimeout="20000"
                redirectPort="18443" />
4 <Connector port="18009" protocol="AJP/1.3" redirectPort="18443" />


为了避免多个tomcat冲突,把<Server port="8005" shutdown="SHUTDOWN">也改成 <Server port="8085" shutdown="SHUTDOWN">

启动apache-tomcat-app1 ,浏览器输入 http://app 1 .baishi.com: 1 8080/examples/servlets/ 回车:

则tomcat配置成功

接下来复制 client的lib包cas-client-core-3.2.0.jarapache-tomcat-app1\webapps\examples\WEB-INF\lib\目录下, 在apache-tomcat-app1\webapps\examples\WEB-INF\web.xml 文件中增加如下内容:

<!-- ======================== 单点登录开始 ======================== -->
          <!-- 用于单点退出,该过滤器用于实现单点登出功能,可选配置-->
          <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>CAS Filter</filter-name>
              <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
              <init-param>
                  <param-name>casServerLoginUrl</param-name>
                  <param-value>https://cas.baishi.com:8443/cas/login</param-value>
              </init-param>
              <init-param>
                  <param-name>serverName</param-name>
                  <param-value>http://app1.baishi.com:18080</param-value>
             </init-param>
          </filter>
          <filter-mapping>
              <filter-name>CAS Filter</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://cas.baishi.com:8443/cas</param-value>
              </init-param>
             <init-param>
                  <param-name>serverName</param-name>
                  <param-value>http://app1.baishi.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>
   
          <!-- ======================== 单点登录结束 ======================== -->

 

 

 

(2) 安装配置 apache-tomcat-app2

解压apache-tomcat-6.0.14 .tar,改名为apache-tomcat-app2对应应用app2的服务

修改apache-tomcat-app2的启动端口,在文件conf/server.xml文件找到如下内容:

<Connector port="8080" protocol="HTTP/1.1"
                 connectionTimeout="20000"
                 redirectPort="8443" />
  <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

改成

 

<Connector port="28080" protocol="HTTP/1.1"
                connectionTimeout="20000"
                redirectPort="28443" />
4 <Connector port="28009" protocol="AJP/1.3" redirectPort="28443" />


为了避免多个tomcat冲突,把<Server port="8005" shutdown="SHUTDOWN">也改成<Server port="8095" shutdown="SHUTDOWN">

启动apache-tomcat-app2 ,浏览器输入 http://app 2 .baishi.com: 2 8080/examples/servlets/ 回车:

按照上述(1)中的方法验证是否成功。

 

接下来复制 client的lib包cas-client-core-3.2.0.jar到 apache-tomcat-app2\webapps\examples\WEB-INF\lib\目录下, 在apache-tomcat-app2\webapps\examples\WEB-INF\web.xml 文件中增加如下内容:

<!-- ======================== 单点登录开始 ======================== -->
          <!-- 用于单点退出,该过滤器用于实现单点登出功能,可选配置-->
          <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>CAS Filter</filter-name>
              <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
              <init-param>
                  <param-name>casServerLoginUrl</param-name>
                  <param-value>https://cas.baishi.com:8443/cas/login</param-value>
              </init-param>
              <init-param>
                  <param-name>serverName</param-name>
                  <param-value>http://app2.baishi.com:18080</param-value>
             </init-param>
          </filter>
          <filter-mapping>
              <filter-name>CAS Filter</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://cas.baishi.com:8443/cas</param-value>
              </init-param>
             <init-param>
                  <param-name>serverName</param-name>
                  <param-value>http://app2.baishi.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>
   
          <!-- ======================== 单点登录结束 ======================== -->

 

 

第五步:测试

 

 

启动之前配置好的三个tomcat分别为:apache-tomcat-casapache-tomcat-app1apache-tomcat-app2.

打开浏览器地址栏中输入:http://app1.baishi.com:18080/examples/servlets/servlet/HelloWorldExample

输入账户和密码之后会出现Hello World

之浏览器地址中输入http://app2.baishi.com:28080/examples/servlets/servlet/HelloWorldExample

就不用输入账户和密码了,直接进入Hello World

最后地址栏中输入:https://cas.baishi.com:8443/cas/logout会注销这个流程,重新开始认证

以上就是整个cas单点登录的简单配置

 

如果有cas服务的tomcat报错java.lang.Exception: Connector attribute SSLCertificateFile must be defined when using SSL with APR

只需把

 <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"

               maxThreads="150" scheme="https" secure="true"

               clientAuth="false" sslProtocol="TLS" 

              keystoreFile="D:/baishikeys/baishikey"

              keystorePass="123456"

   />

改成

 

 <Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol" SSLEnabled="true"

               maxThreads="150" scheme="https" secure="true"

               clientAuth="false" sslProtocol="TLS" 

              keystoreFile="D:/baishikeys/baishikey"

              keystorePass="123456"

   />

即可

后续有很多开发填坑的文章发布,如果对你有帮助,请支持和加关注一下

http://e22a.com/h.05ApkG?cv=AAKHZXVo&sm=339944

https://shop119727980.taobao.com/?spm=0.0.0.0 

 

 

 

 

 

 

 

© 著作权归作者所有

共有 人打赏支持
EDIAGD
粉丝 48
博文 147
码字总数 58327
作品 0
嘉定
后端工程师
cas单点登录原理碎碎念

也许有一天,你去面试,当面试官问你做cas的经验的时候,你会怎么描述? cas单点登录的原理? 单点登录是分为基于session 的单点登录和基于cookie的单点登录,单点登录从本质上讲其实就是一个...

疯狂的兔子 ⋅ 2014/02/26 ⋅ 0

采用CAS原理构建单点登录

企业的信息化过程是一个循序渐进的过程,在企业各个业务网站逐步建设的过程中,根据各种业务信息水平的需要构建了相应的应用系统,由于这些应用系统 一般是在不同的时期开发完成的,各应用系...

haopeng ⋅ 2013/12/20 ⋅ 0

Shiro之CAS单点登录-yellowcong

配置单点登录,有点坑的是,我将Session存在了缓存中,导致我每次登录的时候,都不去cas验证中心,我就感觉很无语,后来将sessionManager删除后,就好用了,太坑了,这问题坑了一天多。实现C...

yelllowcong ⋅ 2017/12/21 ⋅ 0

CAS实现单点登录

CAS介绍 开源的企业级单点登录解决方案 CAS Server 是需要独立部署的 Web 应用 CAS Client 支持非常多的客户端(这里指单点登录系统中的各个 Web 应用),包括 Java, .Net, PHP, Perl, Apache,...

小咔蹭 ⋅ 2013/12/05 ⋅ 25

使用 CAS 在 Tomcat 中实现单点登录

单点登录(Single Sign On , 简称 SSO )是目前比较流行的服务于企业业务整合的解决方案之一, SSO 使得在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。CAS(Centr...

唐玄奘 ⋅ 2017/12/05 ⋅ 0

CAS系列[0] - CAS介绍

CAS介绍 CAS是一个企业级的单点登录框架,全称Central Authentication Service,它提供了全面的单点登录解决方案,可以满足于大多数应用场景,以下是官方的介绍 : Java (Spring Webflow/MVC...

BenjaminMa ⋅ 2016/11/02 ⋅ 0

使用 CAS 在 Tomcat 中实现单点登录

CAS 是 Yale 大学发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法,CAS 在 2004 年 12 月正式成为 JA-SIG 的一个项目。CAS 具有以下特点: 开源的企业级单点登录解决方案...

青夜之衫 ⋅ 2017/12/08 ⋅ 0

Cas之5.2.x版本单点登录自定义REST认证-yellowcong

通过接口的方式进行单点登录的操作。REST这种方式是解决验证数据不在CAS服务端,而是在本地端项目源码地址:https://gitee.com/yellowcong/casdemo/tree/master/casrestdemo ,这个破玩意折腾...

yelllowcong ⋅ 2017/12/19 ⋅ 0

CAS之5.2x版本之Jenkins单点登录-yellowcong

jenkins和cas搞一起了,这个在CI系统中虽然不是必须的,但是账户的统一,让工程师们开发也爽不少,不用头疼那么多密码。让jenkins支持cas,需要有下面步骤:1、安装cas插件,2、配置全局安全配...

yelllowcong ⋅ 04/22 ⋅ 0

单点登录整合方案

. 概念 单点登录(Single Sign On , 简称 SSO )是目前比较流行的服务于企业业务整合的解决方案之一, SSO 使得在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。CAS...

很好亦平凡ms ⋅ 2016/07/17 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

大数据,必须掌握的10项顶级安全技术

我们看到越来越多的数据泄漏事故、勒索软件和其他类型的网络攻击,这使得安全成为一个热门话题。 去年,企业IT面临的威胁仍然处于非常高的水平,每天都会看到媒体报道大量数据泄漏事故和攻击...

p柯西 ⋅ 32分钟前 ⋅ 0

Linux下安装配置Hadoop2.7.6

前提 安装jdk 下载 wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-2.7.6/hadoop-2.7.6.tar.gz 解压 配置 vim /etc/profile # 配置java环境变量 export JAVA_HOME=/opt/jdk1......

晨猫 ⋅ 38分钟前 ⋅ 0

crontab工具介绍

crontab crontab 是一个用于设置周期性被执行的任务工具。 周期性执行的任务列表称为Cron Table crontab(选项)(参数) -e:编辑该用户的计时器设置; -l:列出该用户的计时器设置; -r:删除该...

Linux学习笔记 ⋅ 今天 ⋅ 0

深入Java多线程——Java内存模型深入(2)

5. final域的内存语义 5.1 final域的重排序规则 1.对于final域,编译器和处理器要遵守两个重排序规则: (1)在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用...

江左煤郎 ⋅ 今天 ⋅ 0

面试-正向代理和反向代理

面试-正向代理和反向代理 Nginx 是一个高性能的反向代理服务器,但同时也支持正向代理方式的配置。

秋日芒草 ⋅ 今天 ⋅ 0

Spring 依赖注入(DI)

1、Setter方法注入: 通过设置方法注入依赖。这种方法既简单又常用。 类中定义set()方法: public class HelloWorldOutput{ HelloWorld helloWorld; public void setHelloWorld...

霍淇滨 ⋅ 昨天 ⋅ 0

马氏距离与欧氏距离

马氏距离 马氏距离也可以定义为两个服从同一分布并且其协方差矩阵为Σ的随机变量之间的差异程度。 如果协方差矩阵为单位矩阵,那么马氏距离就简化为欧氏距离,如果协方差矩阵为对角阵,则其也...

漫步当下 ⋅ 昨天 ⋅ 0

聊聊spring cloud的RequestRateLimiterGatewayFilter

序 本文主要研究一下spring cloud的RequestRateLimiterGatewayFilter GatewayAutoConfiguration @Configuration@ConditionalOnProperty(name = "spring.cloud.gateway.enabled", matchIfMi......

go4it ⋅ 昨天 ⋅ 0

Spring clound 组件

Spring Cloud技术应用从场景上可以分为两大类:润物无声类和独挑大梁类。 润物无声,融合在每个微服务中、依赖其它组件并为其提供服务。 Ribbon,客户端负载均衡,特性有区域亲和、重试机制。...

英雄有梦没死就别停 ⋅ 昨天 ⋅ 0

Confluence 6 重新获得站点备份文件

Confluence 将会创建备份,同时压缩 XML 文件后存储熬你的 <home-directory>/backups> 目录中。你需要自己访问你安装的 Confluence 服务器,并且从服务器上获得这个文件。 运行从 Confluence...

honeymose ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部