——任何的成功都不是一蹴而就,经验需要慢慢积累、沉淀!

项目里面用到了CAS单点登录,最近也简单的从应用层面简单研究了下CAS这个开源架构。

1. 基本概念:cookie, session, 会话cookie, jssessionid

- cookie 和 session机制都是为了解决HTTP协议的无状态性而生的

- cookie 是客户端保存用户信息的机制

- session 是服务器端保存用户信息的机制

- cookie其实就是保存在浏览器中的一小段文本,当浏览器第一次访问jsp时,jsp response会给浏览器生成一个cookie,然后浏览器会存储它

- cookie 具有不可跨域性

- cookie 和session 联合使用可以解决跨域记录用户信息的问题

- 为了使浏览器记住服务器上的session,浏览器会生成一个id , 这个id就叫做jsessionid

- 另外,由于一些浏览器禁用cookie, Java EE标准 退出了URL重写,使url里面记录jssessionid

- 上述让浏览器记住服务器上的session的形式就叫做会话cookie,会话cookie在用户登出或者浏览器关闭后自动删除,这样就叫做一次会话。

理解了上面的基本概念和标准,对于理解cas的实现和基本流程很有帮助,cas这样的sso解决方案本来就是构建在cookie和session标准之上的。

2. SSO 和 CAS 介绍

SSO 单点登录,是企业为了解决在相互信任的系统上实现一次登录的解决方案。CAS 是SSO解决方案里面比较成熟的架构,是耶鲁大学发起的一个开源架构。

CAS 具有以下特点:
- 开源的企业级单点登录解决方案。
- CAS Server 为需要独立部署的 Web 应用。
- CAS Client 支持非常多的客户端(这里指单点登录系统中的各个 Web 应用),包括 Java, .Net, PHP, Perl, Apache, uPortal, Ruby 等。

从结构上看,CAS 包含两个部分: CAS Server 和 CAS Client。CAS Server 需要独立部署,主要负责对用户的认证工作;CAS Client 负责处理对客户端受保护资源的访问请求,需要登录时,重定向到 CAS Server。

3. CAS 基本流程

CAS 基本流程 一文已经有相当详细的介绍了。

4. 基本配置

下面给出了项目中关于cas 单点登录的配置:

<!-- ======================== 单点登录配置开始 ======================== --><!-- 该过滤器用于实现单点登出功能,可选配置。 --><filter><filter-name>SSOFilter</filter-name><filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class></filter><filter-mapping><filter-name>SSOFilter</filter-name><url-pattern>*.do</url-pattern></filter-mapping><filter-mapping><filter-name>SSOFilter</filter-name><url-pattern>*.htm</url-pattern></filter-mapping><filter-mapping><filter-name>SSOFilter</filter-name><url-pattern>*.html</url-pattern></filter-mapping><!-- 该过滤器负责用户登陆的心跳判断 --><filter><filter-name>AuthHeartFilter</filter-name><filter-class>com.whty.cms.web.common.filter.AuthenticationHeartFilter</filter-class></filter><filter-mapping><filter-name>AuthHeartFilter</filter-name><url-pattern>*.htm</url-pattern></filter-mapping><filter-mapping><filter-name>AuthHeartFilter</filter-name><url-pattern>*.do</url-pattern></filter-mapping><!-- 该过滤器负责用户的认证工作,必须启用它 --><filter><filter-name>AuthFilter</filter-name><filter-class>com.whty.cms.common.filter.AuthenticationFilter</filter-class></filter><filter-mapping><filter-name>AuthFilter</filter-name><url-pattern>*.do</url-pattern></filter-mapping><filter-mapping><filter-name>AuthFilter</filter-name><url-pattern>*.htm</url-pattern></filter-mapping><!-- 该过滤器负责对Ticket的校验工作,必须启用它 --><filter><filter-name>TicketValidFilter</filter-name><filter-class>com.whty.cms.common.filter.Cas20ProxyReceivingTicketValidationFilter</filter-class><init-param><param-name>casServerUrlPrefix</param-name><param-value>http://yuncs.zjer.cn:30014/aamif/ticketValidate</param-value></init-param><init-param><param-name>redirectAfterValidation</param-name><param-value>true</param-value></init-param><init-param><param-name>artifactParameterName</param-name><param-value>ticket</param-value></init-param></filter><filter-mapping><filter-name>TicketValidFilter</filter-name><url-pattern>*.do</url-pattern></filter-mapping><filter-mapping><filter-name>TicketValidFilter</filter-name><url-pattern>*.htm</url-pattern></filter-mapping><!-- 该过滤器负责实现HttpServletRequest请求的包裹, 比如允许开发者通过HttpServletRequest的getRemoteUser()方法获得SSO登录用户的登录名,可选配置。 --><filter><filter-name>HttpServletRequestWrapperFilter</filter-name><filter-class>org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class></filter><filter-mapping><filter-name>HttpServletRequestWrapperFilter</filter-name><url-pattern>*.do</url-pattern></filter-mapping><filter-mapping><filter-name>HttpServletRequestWrapperFilter</filter-name><url-pattern>*.htm</url-pattern></filter-mapping><!-- 该过滤器使得开发者可以通过org.jasig.cas.client.util.AssertionHolder来获取用户的登录名。 比如AssertionHolder.getAssertion().getPrincipal().getName()。 --><filter><filter-name>AssertionThreadLocalFilter</filter-name><filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class></filter><filter-mapping><filter-name>AssertionThreadLocalFilter</filter-name><url-pattern>*.do</url-pattern></filter-mapping><filter-mapping><filter-name>AssertionThreadLocalFilter</filter-name><url-pattern>*.htm</url-pattern></filter-mapping><!-- 自动根据单点登录的结果设置本系统的用户信息 --><filter><filter-name>AutoSetUserAdapterFilter</filter-name><filter-class>com.whty.cms.web.common.filter.PortalAutoSetUserAdapterFilter</filter-class></filter><filter-mapping><filter-name>AutoSetUserAdapterFilter</filter-name><url-pattern>*.do</url-pattern></filter-mapping><filter-mapping><filter-name>AutoSetUserAdapterFilter</filter-name><url-pattern>*.htm</url-pattern></filter-mapping><!-- ======================== 单点登录配置结束 ======================== -->

这里的cas是由servlet的filter chain 整合到web 应用当中的,每个filter 都是一个独立的cas模块,都有自己独立的功能。

注意理解filter 实现sso 对于理解单点登录和cas的流程很有帮助,在做架构设计的时候,要能够通过看xml配置文件,脑海里自动浮现一幅cas 单点登录的流程图、ER图、时序图。

参考:

1. http://www.cnblogs.com/fnng/archive/2012/08/14/2637279.html

2. http://blog.csdn.net/fangaoxin/article/details/6952954

3. http://www.cnblogs.com/shanyou/archive/2009/08/30/1556659.html

CAS 实现的单点登录相关推荐

  1. 学习CAS实现SSO单点登录

    学习CAS实现SSO单点登录 网上找了几篇比较详细的教程,在这记录一下: 原理: CAS实现SSO单点登录原理 教程: 1.CAS实现单点登录(SSO)经典完整教程 2.SSO之CAS单点登录实例演示 ...

  2. CAS+SSO配置单点登录完整案例

    CAS+SSO配置单点登录完整案例 目录 CAS+SSO配置单点登录完整案例 部署环境 环境说明 安全证书配置 1.打开cmd命令窗口(管理员身份打开) 2.生成证书,在cmd窗口输入以下命令: 3. ...

  3. xxl-sso kisso cas三个单点登录系统分析

    xxl-sso kisso cas三个单点登录系统分析 xxl-sso 统一在一个地方登录 客户端和服务端同时连接一个redis 登录成功后将用户信息写入redis. 登录成功返回 sessionId ...

  4. cas+shiro+spring 单点登录

    2019独角兽企业重金招聘Python工程师标准>>> 最近公司在搞单点登录,之前也做过,用的是58同城的wf框架,基于cas 的原理用拦截器自己写的一套.目前用cas+shiro+ ...

  5. cas跨域单点登录原理_CAS实现SSO单点登录原理

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

  6. spring + shiro + cas 实现sso单点登录

    sso-shiro-cas spring下使用shiro+cas配置单点登录,多个系统之间的访问,每次只需要登录一次,项目源码 系统模块说明 cas: 单点登录模块,这里直接拿的是cas的项目改了点样 ...

  7. Liferay门户与CAS实现SSO单点登录

    http://blog.csdn.net/yang_19790212/article/details/6635778 1.1 准备工作 1.1.1  安装JDK1.6.0.20 JAVA 1.6.0以 ...

  8. CAS服务下单点登录(服务端与客户端)

    转自:http://www.open-open.com/lib/view/open1359286846414.html 此文的目的是为了加深自己的理解,做一个备份与分享 过程全为自己的实际操作步骤 第 ...

  9. cas 单点登录_47 使用cas完成单点登录-02 搭建cas client完成单点登录

    上一节我们搭建了cas server.这一节我们将搭建两个客户端完成单点登录的测试. 1.前提约束 完成搭建cas serverhttps://www.jianshu.com/p/ed0c1359b8 ...

最新文章

  1. 0基础学python编程难吗-对于0基础的人,直接学 Python 编程合适吗?
  2. linux 解包与打包
  3. OPW-00001: Unable to open password-file
  4. 2019届互联网校招本科薪酬清单
  5. vs 中自带的代码混淆器 Dotfuscator (图)
  6. 机器学习之非监督学习与强化学习
  7. C语言之字符串探究(五):N系列字符串函数——strncpy、strncat、strncmp
  8. 【引用】MySQL定时任务
  9. JS实现单源点最短路径、动态规划分段图算法
  10. python函数参数为文件名_从零开始第5步:Python 函数和模块
  11. [java多线程]高并发List与Map
  12. quartz 配置 数据源
  13. kali之iwconfig
  14. 2020 年,从架构谈起,到 Mesh 结束
  15. ai背景合成_AI突破次元壁又火了!《飞屋环游记》动漫角色一秒变真人,网友:小罗的“猫王发型”有点酷...
  16. java方法执行jvm做了什么_JVM 方法到底如何执行
  17. c++程序员书籍推荐
  18. mysql8.0初始化密码_MySQL 8.0 手动配置、修改初始化密码
  19. Java包装类相关知识点
  20. mino文件服务器,mimo技术有什么用_mino技术原理解析

热门文章

  1. 卷积神经网络 (CNN) 基本原理和公式
  2. idea自定义背景图片
  3. 我的macOS Ventura使用体验报告
  4. 查找计算机里包含相关文字,win10系统搜索文件中包含的文字来找到该文件的详细方案...
  5. 程序员喜爱的壁纸,需要自取
  6. java trim 空指针_trim()空指针异常问题!
  7. socket学习二、accept、read、write函数详解
  8. Ubuntu 20.04 + ROS Noetic + OpenCV 4.10编译kalibr相机标定功能包
  9. 【电商网站】将商品加入购物车代码
  10. VS2008试用版破解方法