CAS作为开源的单点登陆框架已经非常的流行了。由于它对已有系统的入侵性小,支持的语言多,备受广大开发者关注;也是很多公司将之作为单点登陆的首选框架。关于CAS如何搭建的文章,网上已经非常多了,随便搜搜都一大堆。我也就不再写些重复的东西了,但是网上的东西有时候常常是不全,或版本问题搞的很多人都很迷糊。我曾经也很迷糊,如果刚接触CAS,请你继续往下看;如果你是CAS高手,请指正我说错的地方。

CAS最早是耶鲁大学开发的(CAS2.0以前的版本),后来开源出来由JASIG来继续开发(CAS2.0以后的版本)。所以,当你准备那某一片文章上手练习的时候请分清版本。个人建议还是阅读JASIG官方文档比较好。https://wiki.jasig.org/display/CASC

一个完整的单点登陆方案分两部分

CAS server

CAS server如何配置就不多说了,基本的步骤就是

1. 下载CAS server包

2. 配置Tomcat的Https访问设置

3. 部署CAS server,其实就是将.war文件拷贝到Tomcat目录下

4. 生成证书(可以买,也可以使用自签名证书,或者干脆就用http协议,那就不需要证书了)

5. 修改用户访问配置(CAS支持关系数据库,LDAP等多种数据存储)

CAS client

CAS client是部署在应用端的,因为通常单点登陆都会涉及到对已有系统的改造。所以,client端的侵入性就变的很重要。侵入性越小,越容易部署和测试。CAS框架的优点之一就在于它的client端对应用系统的侵入性比较小。对于Java的Web项目来说,你只需要在web.xml里面添加一个filter,拷贝CAS client的jar包到应用系统,然后改造登陆认证过程即可。如果CAS server用的是Https,那就还需要将证书导入到JVM的可信证书域中,通常是($JAVA_HOME/lib/security/cacerts)。

所有的一切看着都挺简单的,但实际部署中你会遇到各式各样的问题。有很多问题网上都有人解答,这里我就记录一下我遇到的一个没找到答案的问题?

现象:

当你配置完CAS server, 也部署了CAS client后。用https登陆CAS server也都没问题时,而你无论如何都无法在登陆后跳转到你期待的页面。尽管一切看起来都配置对了,证书也导了,https也配了,filter也加了。但是还是不停的抛CAS ticket validation expection, CAS server no response错误。

解决方案:

请检查你的client是否把4个filter都配置全了,并且顺序要对。

 <!-- CAS SSO --><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><param-value>https://cas-server:8443/cas/login</param-value></init-param><init-param><param-name>renew</param-name><param-value>false</param-value></init-param><init-param><param-name>gateway</param-name><param-value>false</param-value></init-param><init-param><param-name>serverName</param-name><param-value>http://client-host:8080</param-value></init-param></filter><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-server:8443/cas/</param-value></init-param><init-param><param-name>serverName</param-name><param-value>http://client-host:8080</param-value></init-param><init-param><param-name>useSession</param-name><param-value>true</param-value></init-param><init-param><param-name>redirectAfterValidation</param-name><param-value>true</param-value></init-param></filter><filter><filter-name>CAS HttpServletRequest Wrapper Filter</filter-name><filter-class>org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class></filter><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 Authentication Filter</filter-name><url-pattern>/sso/*</url-pattern></filter-mapping><filter-mapping><filter-name>CAS Validation Filter</filter-name><url-pattern>/sso/*</url-pattern></filter-mapping><filter-mapping><filter-name>CAS HttpServletRequest Wrapper Filter</filter-name><url-pattern>/sso/*</url-pattern></filter-mapping><filter-mapping><filter-name>CAS Assertion Thread Local Filter</filter-name><url-pattern>/sso/*</url-pattern></filter-mapping>

官方文档特别说明这4个Filter是必须的

The correct order of the filters in web.xml is necessary:

  1. AuthenticationFilter
  2. TicketValidationFilter (whichever one is chosen)
  3. HttpServletRequestWrapperFilter
  4. AssertionThreadLocalFilter

这里我要说明一下为什么这4个filter是必须要配的。

AuthenticationFilter的作用是用于拦截SSO登陆请求的,当你提交的request符合SSO登陆规则,CAS client会通过这个filter将登陆请求转向到CAS server的登陆界面。因为这是第一步,所以它要在最上面。

TicketValidationFilter的作用是用于拦截登陆返回的跳转请求的。当CAS server确认登陆用户名密码后,会返回一个server ticket,这个ticket会由应用服务器上的CAS client再送回CAS server进行验证,用于防止仿冒攻击的。

HttpServletRequestWrapperFilter的目的是将CAS server返回的信息封装到Http request里面,这样客户端就可以用request.getRemoteUser()来获取用户名等信息了。

AssertionThreadLocalFilter的作用是用于前端程序(通常是前端脚本程序)访问,因为这个时候你无法通过request来获取信息。

所以如果这4个filter不配置正确,就会报各种错误。

单点登陆框架CAS的研究相关推荐

  1. CAS使用账号密码实现单点登陆

    CAS使用账号密码实现单点登陆 CAS单点登陆框架 项目需求 实现思路 1.使用用户名密码获取TGT 2.根据TGT和Service获取ST 3.使用ST访问目标资源 Java代码实现 CAS单点登陆 ...

  2. sso单点登陆实现过程汇总记录

    前言 在早期,项目规模不大的时候,企业中存在的系统不多,通常为1或者2个.每个系统都有自己独立的登陆模块,这样用户进行登陆也不是特别麻烦,分别进行登陆就可以了.但是随着企业规模不断变大,随之而然的系统 ...

  3. mysql sd5加密语句_CAS原理与配置-基于CAS的单点登陆的研究(上)

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

  4. CAS单点登陆原理简介及环境搭建

    前言 最近这几天在研究CAS 今天终于在本地部署成功了 今天写一篇文章记录下 原理简介 SSO单点登录 在多个相互信任的系统中,用户只需要登录一次就可以访问其他受信任的系统. 新浪微博与新浪博客是相互 ...

  5. PHP使用phpCAS对接CAS单点登陆系统

    PHP使用phpCAS对接CAS单点登陆系统 综述 `CAS`单点登陆原理 搭建`CAS SSO`SERVER服务端 下载`phpCAS`客户端 phpCAS客户端配置 PHP开发对接 注意 综述 本 ...

  6. cas单点登陆。就这一篇就够了!!!!!

    前言: cas是什么我就不累赘说了.就简单说下大致的流程.首先,cas是一个独立的项目.就是一个war包,部署在tomcat上面启动就ok.然后我们要实现单点登陆,无疑是访问系统1,如果没有登录,就跳 ...

  7. cas单点登陆系统-casServer搭建

    最近工作比较忙,空闲的时间在搞单点登陆系统,自己写了一套SSO在GitHub上,过程走通了.通过这个例子,自己熟悉了流程,而且破天荒的使用了抽象设计模式,并且熟悉了cookies和session的使用 ...

  8. Java架构-CAS SSO单点登录框架介绍

    1.了解单点登录 SSO 主要特点是: SSO 应用之间使用 Web 协议(如 HTTPS) ,并且只有一个登录入口. SSO 的体系中有下面三种角色: User(多个) Web 应用(多个) SSO ...

  9. CAS单点登录框架使用

    CAS单点登录框架使用 CAS Server 1.GitHub上下载项目 https://github.com/apereo/cas-overlay-template/tree/5.3 5.3之后的都 ...

最新文章

  1. Opencv2.4.4示例程序说明
  2. 设计模式 — 行为型模式 — 访问者模式
  3. 线性表的C/C++实现(数据结构 严蔚敏版)
  4. python array 使用创建10万浮点数
  5. hibernate3.6.0日志配置
  6. 做网络需要掌握的56句话
  7. java cropper 上传_java web 网站头像上传处理 (springmvc +bootstrap+cropper)
  8. oracle 9207-gt;9208(HPUX,RAC)
  9. 设定所有tableView中cell的分隔线颜色
  10. Navicat for MySQL远程连接的时候报错mysql 1130的解决方法
  11. 从零开始--系统深入学习IOS(使用Swift---带链接)
  12. 计算机二级java邓伦单_2010年3月计算机等级考试二级Java笔试试题(文字版)
  13. VB.NET实现Windows剪贴板监视器
  14. idea创建vue模板
  15. macd ema java源码_[转载]彩色MACD指标源码
  16. SSH基础:ssh首次连接的公钥认证
  17. 制作Windows PE启动镜像命令
  18. 手机注册服务器异常是什么问题,ohho注册不了网络异常
  19. 华为设备无线环境中的MAC认证
  20. Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null objec

热门文章

  1. Linux下crontab命令的用法
  2. Excel有用的函数(ISBLANK,IF,LEFT,VALUE)
  3. inkscape 无法打开文档属性
  4. mac无法访问samba共享 提示输入用户名密码
  5. php页面get方法实现ajax,入门实例教程
  6. 《linux文件权限管理大总结》RHEL6
  7. Bloom Filter(布隆过滤器)的概念和原理
  8. 求出100~200之间的素数
  9. 关于解决DevExpress用DevExpress patch工具破解后经常弹出试用框的问题
  10. JavaScript自定义浏览器滚动条兼容IE、 火狐和chrome