自从CAS 3.4就很好的支持了单点注销功能,配置也很简单。
之前版本因为在CAS服务器通过HttpClient发送消息时并未指定为POST方式,所以在CAS客户端的注销Filter中没有收到POST请求(要知道Filter只对Post请求起作用),也就没有做session销毁处理。
两个业务系统APP1和APP2
在没有配置单点退出时,效果是这样子的
1:登录APP1,然后经过CAS认证后进入APP1,再访问APP2无需要认证
2:在APP1中连接到cas的logout地址,现象注销成功界面,然后再访问APP1,还是可以进去的,因为APP1将用户的登录票据存入了session。
那么实现了单点退出后的效果应该是这样子的:
1:登录APP1,然后经过CAS认证后进入APP1,再访问APP2无需要认证
2:用户在APP1或者APP2点击注销,显示CAS的注销成功页面,然后再访问APP1或者APP2都需要再次认证。
具体配置为,在APP1和APP2的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之前,界面的注销连接到CAS的logout地址,如http://localhost:8080/cas/logout
SingleSignOutFilter,主要是在有ticket参数的时候,将session放到sessionMappingStorage,如果参数中存在logoutRequest,则注销session,那什么时候去注销sessionMappingStorage的东西呢?这是靠SingleSignOutHttpSessionListener来实现的,当有session被销毁的时候,触发将sessionMappingStorage中对应sessionid中的数据删除。
所以在配置单点登出的时候,一定要配置这个监听器,否则客户端很容易导致内存溢出的。让我们先来看看SingleSignOutFilter的整体逻辑。
那么这个是在什么时候会触发呢,这个是在你登陆的任意客户端,调用https://localhost:8080/logout,这个取得cookie里面的TGT数据,找到TGT中关联的所有ST对应的地址(即多个cas client),向每个地址方式一个http请求,并传递logoutRequest参数。
来看看源代码是怎么实现的:
- public void doFilter(final ServletRequest servletRequest, final ServletResponse servletResponse, final FilterChain filterChain) throws IOException, ServletException {
- // 转换参数
- final HttpServletRequest request = (HttpServletRequest) servletRequest;
- //判断参数中是否具有artifactParameterName属性指定的参数名称,默认是ticket
- if (handler.isTokenRequest(request)) {
- // 如果存在,在本地sessionMappingStorage中记录session。
- handler.recordSession(request);
- } else if (handler.isLogoutRequest(request)) {//判断是否具有logoutParameterName参数指定的参数,默认参数名称为logoutRequest
- // 如果存在,则在sessionMappingStorage中删除记录,并注销session。
- handler.destroySession(request);
- // 注销session后,立刻停止执行后面的过滤器
- return;
- } else {
- log.trace("Ignoring URI " + request.getRequestURI());
- }
- //条件都不满足,继续执行下面的过滤器
- filterChain.doFilter(servletRequest, servletResponse);
- }
如果直接访问CAS的logout话,会出现注销成功页面,其实大部分情况下这个页面是没有必要的,更多的需求可能是退出后显示登录页面,并且登录成功后还是会进入到之前的业务系统,那么可以修改cas-servlet.xml文件,在"logoutController"的bean配置中增加属性“followServiceRedirects”,设置为“true”,然后在业务系统的注销连接中加入"service参数",值为业务系统的绝对URL,这样就OK了,如你的业务系统URL为:http://localhost:8080/casClient,那么注销URL就为:http://localhost:8080/cas/logout?service=http://localhost:8080/casClient
如果出现这种现象:访问过http://localhost:8080/cas/logout之后不关浏览器,还是能访问我的应用
可能因为:
1:你的CAS服务器将cookie设置成了浏览器有效,那么表示如果浏览器不关闭,则一直有效。
在WEB-INF/spring-configuration/ticketGrantingTicketCookieGenerator.xml中设置cookie有效期,默认配置cookie有效期为-1
2:你的应用中注销的filter-mapping没有放在所有mapping之前
原文出处:http://blog.csdn.net/tch918/article/details/22276627#comments
相关推荐
CAS(Central Authentication ...总的来说,CAS单点登录服务端的部署涉及了Web应用的部署、应用服务器的管理、服务定义配置、用户认证集成以及安全性考量等多个方面,是构建安全、便捷的多应用系统环境的关键组件。
在"cas单点登录服务端+客户端demo"中,我们可以看到以下几个关键知识点: 1. **单点登录(SSO)**:SSO允许用户在一次登录后,能够无感知地在各个关联应用间切换,无需重新验证身份。它简化了用户的登录流程,提高...
单点登录服务端项目cas-server单点登录服务端项目cas-server 单点登录服务端项目cas-server 单点登录服务端项目cas-server 单点登录服务端项目cas-server 单点登录服务端项目cas-server 单点登录服务端项目cas-...
综上所述,这个压缩包提供了一个完整的CAS单点登录实例,包括服务端和客户端的实现,可以帮助开发者理解并部署自己的CAS系统。通过深入研究和实践,你可以掌握如何利用CAS实现Web应用的安全、便捷的单点登录功能。
CAS(Central Authentication Service)是Java开发的一个开源的单点登录(Single Sign-On,简称SSO)框架,主要用于解决网络应用中的身份验证问题。本压缩包提供了CAS服务端自定义认证的实现,以及CAS客户端的配置...
CAS(Central Authentication Service)是一种广泛使用的开放源代码的单点登录(Single Sign-On,SSO)框架,由耶鲁大学开发并维护。SSO允许用户通过一次登录验证就能访问多个应用系统,无需在每个系统之间单独进行...
通过这个war包,开发者可以快速搭建起一个CAS服务端,并结合客户端实现单点登录功能。在部署和使用过程中,需要根据具体环境调整配置,确保与现有的系统和服务无缝对接。同时,定期关注CAS的新版本和安全更新,以...
单点登录(Single Sign On , 简称 SSO )是目前比较流行的服务于企业业务整合的解决...CAS Client 支持非常多的客户端(这里指单点登录系统中的各个 Web 应用),包括 Java, .Net, PHP, Perl, Apache, uPortal, Ruby 等。
[置顶] SSO单点登录系列2:cas客户端和cas服务端交互原理动画图解,cas协议终极分析 http://blog.csdn.net/ae6623/article/details/8848107 目 录 1 引言 4 1.1 摘要 4 1.2 范围 4 1.3 读者对象 4 1.4 关键词 4 2 ...
在"SSO之CAS单点登录客户端服务端jar包"中,包含的是实现CAS单点登录功能所需的客户端和服务端组件。这些jar包包含了以下关键知识点: 1. **CAS服务器**:这是整个SSO架构的核心,负责处理用户的登录请求,验证凭证...
这个压缩包“CAS服务端和客户端war包.rar”包含了实现CAS服务所需的所有核心组件和两个客户端应用,方便进行SSO环境的搭建。 1. **CAS服务器端war包(cas.war)** CAS服务器是整个SSO系统的核心,它提供认证服务,...
cas,4.1.9版本服务端 需要手动修改里面的数据库配置.
CAS(Central Authentication Service)是Java开发的一个开源单点登录(Single Sign-On,SSO)框架,主要用于实现用户在多个应用系统中的统一身份验证。在这个压缩包中,包含了一个CAS服务端和客户端的代码实例,...
**CAS (Central Authentication Service) 知识点详解** CAS 是一个开源的身份验证框架,它允许用户通过单一登录(Single Sign-On, SSO)在多个应用系统间自由切换,无需重复登录。CAS4.2.7 版本是 CAS 的一个稳定...
在本文中,我们将探讨如何在普通方式和Spring Boot方式下配置和使用CAS客户端和服务端。 首先,让我们了解一下`CMD生成证书命令.txt`。在CAS部署中,安全通信通常依赖于SSL/TLS证书,用于加密传输数据。这个文件...
CAS 是 Central Authentication Service 的缩写 —— 中央认证服务,一种独立开放指令协议,是 Yale 大学发起的一个企业级开源项目,旨在为 Web 应用系统提供一种可靠的 SSO 解决方案。 CAS 支持以下特性: CAS v1, ...
CAS(Central Authentication Service)是...综上所述,这个“cas.rar”压缩包是学习和实践CAS单点登录服务端开发的宝贵资源,通过研究其中的代码,开发者可以掌握CAS的工作原理,进而实现和定制自己的SSO解决方案。
springmvc+spring+shiro+cas单点登录实例 加入了登录验证码认证,修改了下首页样式,不过样式没有弄好,很丑的,有空自己再弄下 说明:cas-server是单点登录服务端,用的是maven项目,但是WEB-INF里面的lib目录下面...
1. SSO客户端集成在各个需要实现SSO的应用系统中,它们负责引导用户到CAS服务端进行登录,并处理服务票据。 2. 客户端通常通过CasClientFilter或Spring Security的CasAuthenticationFilter来拦截请求,判断用户是否...
在这个例子中,我们基于Spring MVC、Maven、WebService和Memcached来实现一个功能完善的单点登录系统,同时支持完全跨域和单点退出。 1. **Spring MVC**: Spring MVC是Spring框架的一个模块,主要用于构建Web应用...