什么是单点登录

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

我们目前的系统存在诸多子系统,而这些子系统是分别部署在不同的服务器中,那么使用传统方式的session是无法解决的,我们需要使用相关的单点登录技术来解决。

什么是cas

CAS 是 Yale 大学发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法,CAS 在 2004 年 12 月正式成为 JA-SIG 的一个项目。CAS 具有以下特点:
【1】开源的企业级单点登录解决方案。
【2】CAS Server 为需要独立部署的 Web 应用。
【3】CAS Client 支持非常多的客户端(这里指单点登录系统中的各个 Web 应用),包括 Java, .Net, PHP, Perl, Apache, uPortal, Ruby 等。
从结构上看,CAS 包含两个部分: CAS Server 和 CAS Client。CAS Server 需要独立部署,主要负责对用户的认证工作;CAS Client 负责处理对客户端受保护资源的访问请求,需要登录时,重定向到 CAS Server。下图是 CAS 最基本的协议过程:

SSO单点登录访问流程主要有以下步骤:

1. 访问服务:SSO客户端发送请求访问应用系统提供的服务资源。

2. 定向认证:SSO客户端会重定向用户请求到SSO服务器。

3. 用户认证:用户身份认证。

4. 发放票据:SSO服务器会产生一个随机的Service Ticket。

5. 验证票据:SSO服务器验证票据Service Ticket的合法性,验证通过后,允许客户端访问服务。

6. 传输用户信息:SSO服务器验证票据通过后,传输用户认证结果信息给客户端。

CAS服务端部署

Cas服务端其实就是一个war包。
在资源\cas\source\cas-server-4.0.0-release\cas-server-4.0.0\modules目录下
cas-server-webapp-4.0.0.war 将其改名为cas.war放入tomcat目录下的webapps下。启动tomcat自动解压war包。浏览器输入http://localhost:8080/cas/login ,可看到登录页面

cas下载链接:https://pan.baidu.com/s/1Domy7fuej2OnAbkcM-RMHQ 密码:70n5

不要嫌弃这个页面丑,我们后期可以再提升它的颜值。暂时把注意力放在功能实现上。 这里有个固定的用户名和密码 casuser/Mellon登录成功后会跳到登录成功的提示页面

cas启动完毕!!!

第二步

修改tomcat端口,也可以不修改

修改CAS配置文件 修改cas的WEB-INF/cas.properties

去除https认证

CAS默认使用的是HTTPS协议,如果对安全要求不高,可使用HTTP协议。我们这里讲解通过修改配置,让CAS使用HTTP协议。

修改cas的WEB-INF/deployerConfigContext.xml 
找到下面的配置

<bean class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler" p:httpClient-ref="httpClient"/>

这里需要增加参数p:requireSecure=”false”,requireSecure属性意思为是否需要安全验证,即HTTPS,false为不采用

修改cas的/WEB-INF/spring-configuration/ticketGrantingTicketCookieGenerator.xml 
找到下面配置

<bean id="ticketGrantingTicketCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"
p:cookieSecure="true"
p:cookieMaxAge="-1"
p:cookieName="CASTGC"
p:cookiePath="/cas" />

参数p:cookieSecure=”true”,同理为HTTPS验证相关,TRUE为采用HTTPS验证,FALSE为不采用https验证。
参数p:cookieMaxAge=”-1”,是COOKIE的最大生命周期,-1为无生命周期,即只在当前打开的窗口有效,关闭或重新打开其它窗口,仍会要求验证。可以根据需要修改为大于0的数字,比如3600等,意思是在3600秒内,打开任意窗口,都不需要验证。
我们这里将cookieSecure改为false , cookieMaxAge 改为3600

修改cas的WEB-INF/spring-configuration/warnCookieGenerator.xml 
找到下面配置

<bean id="warnCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"
p:cookieSecure="true"
p:cookieMaxAge="-1"
p:cookieName="CASPRIVACY"
p:cookiePath="/cas" />

我们这里将cookieSecure改为false , cookieMaxAge 改为3600

===================================================

现在来新建maven项目,cas,创建过程,请浏览这篇 eclipse创建maven项目 随想,现在maven的pom.xml文件中添加jar包依赖

<!-- cas -->
<dependency>
  <groupId>org.jasig.cas.client</groupId>
  <artifactId>cas-client-core</artifactId>
  <version>3.3.3</version>
  <exclusions>
    <exclusion>
      <groupId>org.slf4j</groupId>
      <artifactId>log4j-over-slf4j</artifactId>
    </exclusion>
  </exclusions>
</dependency>

配置web.xml

<!-- 该过滤器用于实现单点登出功能,可选配置。 -->
<filter>
<filter-name>CAS Single Sign Out Filter</filter-name>
<filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
</filter>
<!-- 该过滤器负责用户的认证工作,必须启用它 -->
<filter>
<filter-name>CASFilter</filter-name>
<filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
<init-param>
<param-name>casServerLoginUrl</param-name>

<!--此处会跳转到cas单点登录的登录页面
<param-value>http://localhost:38080/cas/login</param-value>
<!--这里的server是服务端的IP -->
</init-param>
<init-param>
<param-name>serverName</param-name>

<!--成功后跳转的ip-->

<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.Cas20ProxyReceivingTicketValidationFilter</filter-class>
<init-param>
<param-name>casServerUrlPrefix</param-name>
<param-value>http://localhost:38080/cas</param-value>
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>http://localhost:8080</param-value>
</init-param>
</filter>

<!-- 该过滤器负责实现HttpServletRequest请求的包裹, 比如允许开发者通过HttpServletRequest的getRemoteUser()方法获得SSO登录用户的登录名,可选配置。 -->
<filter>
<filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
<filter-class>
org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class>
</filter>

<!-- 该过滤器使得开发者可以通过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 Single Sign Out Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CASFilter</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 HttpServletRequest Wrapper Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CAS Assertion Thread Local Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 用于单点退出,该过滤器用于实现单点登出功能,可选配置 -->
<listener>
<listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
</listener>

配置完成后,启动maven项目,会跳转至cas的登录页面

登录成功后跳转至maven的欢迎界面http://localhost:38080/cas/login?service=http%3A%2F%2Flocalhost%3A8081%2Fcas1%2F

service后面的ip和port取自于web.xml配置文件,service后面的地址也是登录后转发的地址。

新建第二个maven项目,创建过程与上一样,pom.xml文件添加jar包依赖,web.xml文件添加单点登录配置

,两个项目用同一个tomcat启动,也可以用两个tomcat启动,然后访问第一个项目,登录成功后,访问第二个项目的时候,就不需要再次登录,会直接跳转到第二个项目的欢迎界面,可以看到输出下面内容,到这里,单点登录已经成功

我们可以将这个链接添加到index.jsp中

<a href="http://localhost:38080/cas/logout">退出登录</a>

但我们更希望退出登录后,能自动跳转到某个页面,那如何处理呢? 
修改cas系统的配置文件cas-servlet.xml

<bean id="logoutAction" class="org.jasig.cas.web.flow.LogoutAction"
p:servicesManager-ref="servicesManager"
p:followServiceRedirects="${cas.logout.followServiceRedirects:true}"/>

<a href="http://localhost:38080/cas/logout?service=http://localhost:38080/cas/login?service=http://localhost:8080/cas1/index.jsp">退出登录</a>

如果这样的a标签会ticket验证不过去,<a href="http://localhost:38080/cas/logout?service=http://localhost:8080/cas1">退出登录</a>

升级单点登录----单点登录页面改造,单点登录验证改成匹配数据库,动态验证

修改cas服务端中web-inf下deployerConfigContext.xml ,添加如下配置

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
p:driverClass="com.mysql.jdbc.Driver"
p:jdbcUrl="jdbc:mysql://127.0.0.1:3306/pinyougoudb?characterEncoding=utf8"
p:user="root"
p:password="123456" />
<bean id="passwordEncoder"
class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder"
c:encodingAlgorithm="MD5"
p:characterEncoding="UTF-8" />
<bean id="dbAuthHandler"
class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler"
p:dataSource-ref="dataSource"
p:sql="select password from tb_user where username = ?"
p:passwordEncoder-ref="passwordEncoder"/>

引入 jar包依赖

将以下三个jar包放入webapps\cas\WEB-INF\lib下

用数据库中的用户名和密码进行测试,到这里最简单的单点登录就算完成了,但是扩展就得看源码。

今天突然感觉很无奈,感觉读源码能力需要去培养一下,目前是能力为0.

转载于:https://www.cnblogs.com/hejj-bk/p/11308651.html

单点登录cas-4.0.0 只是简单的同时登入,同时登出功能相关推荐

  1. 01单点登录CAS 5.3.4搭建及使用

    01单点登录CAS 5.3.4搭建及使用 参考网址1 参照网址2 参照网址3 此文档代码GitHub地址 一.CAS介绍 单点登录Single Sign on (SSO), CAS ( Central ...

  2. 分析单点登录cas的解决方式

    1.      CAS 简介 1.1.  What is CAS ? CAS ( Central Authentication Service ) 是 Yale 大学发起的一个企业级的.开源的项目,旨 ...

  3. jasig cas java示例_单点登录cas jasig学习笔记

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

  4. 单点登录CAS学习(一):初识单点登录

    一.单点登录应用场景 不少业主单位随着自身的发展,建立不少业务支撑系统,往往会采用不同的开发商进行系统开发和建设,因此必然形成如下一种局面:工作人员需要登录多个业务系统才能将自己的工作全部完成,给工作 ...

  5. springmvc--sso单点登录cas统一身份认证器

    开发环境 maven idea Windows 10 JDK 1.8+ 域名解析的配置 这里通过SwitchHosts来实现:以管理员身份打开 前两个:两个客户端应用的域名 后一个:是服务端的域名. ...

  6. CAS实现SSO单点登录-CAS Server搭建

    最近公司连续接了三四个单点登录集成的项目,由我们公司提供CAS Server端的,也有需要我们把Client与其他公司提供的Server端对接的,我负责把我们公司的一个Client与另外一个公司提供的 ...

  7. 单点登录 cas 设置回调地址_cas客户端流程详解(源码解析)单点登录

    博主之前一直使用了cas客户端进行用户的单点登录操作,决定进行源码分析来看cas的整个流程,以便以后出现了问题还不知道是什么原因导致的 cas主要的形式就是通过过滤器的形式来实现的,来,贴上示例配置: ...

  8. 单点登录 cas 设置回调地址_单点登录(SSO)看这一篇就够了

    背景 在企业发展初期,企业使用的系统很少,通常一个或者两个,每个系统都有自己的登录模块,运营人员每天用自己的账号登录,很方便. 但随着企业的发展,用到的系统随之增多,运营人员在操作不同的系统时,需要多 ...

  9. 单点登录 cas 设置回调地址_单点登录落地实现技术有哪些,有哪些流行的登录方案搭配?...

    实现单点登录说到底就是要解决如何产生和存储那个信任,再就是其他系统如何验证这个信任的有效 性,因此要点也就以下两个:1.存储信任 :2.服务器生产~验证信任 : 3.拿到服务器再次验证. 单点登录的常 ...

  10. 单点登录-CAS介绍

    什么是 CAS CAS(Central Authentication Service)是耶鲁大学的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录解决方案.采用 CAS 最大的因素是从安全 ...

最新文章

  1. Codeforces Round #369 (Div. 2)
  2. jquery改变html元素的样式,给input标签赋值,onclick中文传参问题等
  3. SQL判断NULL的几种常见方式
  4. ORA-19573: cannot obtain exclusive enqueue for datafile 1
  5. 分布式与人工智能课程(part11)--绘制词云图
  6. GaussDB(for openGauss)让数据“存得下、算得快、算得准”
  7. 【LeetCode】【HOT】208. 实现 Trie (前缀树)
  8. 2021年三月中旬推荐阅读文章
  9. 第十章——维护索引(1)——索引碎片
  10. 只用几行代码,我让模型『训练』加速了3倍以上!
  11. JavaScript,5种调用函数的方法
  12. 21款网页版html5小游戏源码
  13. Git 详细安装教程(详解 Git 安装过程的每一个步骤)
  14. 【从嵌入式视角学习香山处理器】一、如何开始?(开发环境搭建)
  15. php onblur=,onblur
  16. Observable与Subject
  17. 微生物qPCR定量检测
  18. python实现微信hook_GitHub - gemgin/wechathook: 借助微信hook,拦截修改某些call,填充进我们的Python代码,进行微信公众号文章的爬取...
  19. 容易发错音的英语单词及音标
  20. ART-Pi系列文章

热门文章

  1. socket 5协议详解
  2. 个人网站到底怎样赚钱 [zt]
  3. 软件测试周刊(第71期):大悲时不发言,大怒时不争辩,大喜时不许诺。
  4. 任务管理器--内存篇(上)
  5. android service拦截按键,android里面屏蔽home键/禁止Home键或者随你DIY
  6. [进阶]-多线程、多进程、异步IO实用例子
  7. 生产者-消费者-管程法(java代码示例)
  8. 【烈日炎炎战后端】Git(0.1万字)
  9. 刚上任的程序员如何做好团队管理
  10. 企业与组织仍然没有实现无纸化的三大原因