`

cas单点退出,服务端广播post给客户端退出

阅读更多

自从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文件中增加:

 

[html] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. <listener>    
  2.         <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>    
  3. </listener>    
  4.         
  5.  <filter>    
  6.        <filter-name>CAS Single Sign Out Filter</filter-name>    
  7.        <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>    
  8.   </filter>    
  9. <filter-mapping>    
  10.     <filter-name>CAS Single Sign Out Filter</filter-name>    
  11.     <url-pattern>/*</url-pattern>    
  12.  </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参数。

来看看源代码是怎么实现

 

[java] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. public void doFilter(final ServletRequest servletRequest, final ServletResponse servletResponse, final FilterChain filterChain) throws IOException, ServletException {    
  2.       // 转换参数    
  3.     final HttpServletRequest request = (HttpServletRequest) servletRequest;    
  4.     //判断参数中是否具有artifactParameterName属性指定的参数名称,默认是ticket    
  5.       if (handler.isTokenRequest(request)) {    
  6.         // 如果存在,在本地sessionMappingStorage中记录session。    
  7.           handler.recordSession(request);     
  8.       } else if (handler.isLogoutRequest(request)) {//判断是否具有logoutParameterName参数指定的参数,默认参数名称为logoutRequest    
  9.         // 如果存在,则在sessionMappingStorage中删除记录,并注销session。    
  10.         handler.destroySession(request);    
  11.           // 注销session后,立刻停止执行后面的过滤器    
  12.           return;    
  13.       } else {    
  14.           log.trace("Ignoring URI " + request.getRequestURI());    
  15.       }    
  16.       //条件都不满足,继续执行下面的过滤器    
  17.       filterChain.doFilter(servletRequest, servletResponse);    
  18.   }    

 

 

如果直接访问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单点登录服务端

    CAS(Central Authentication ...总的来说,CAS单点登录服务端的部署涉及了Web应用的部署、应用服务器的管理、服务定义配置、用户认证集成以及安全性考量等多个方面,是构建安全、便捷的多应用系统环境的关键组件。

    cas单点登录服务端+客户端demo

    在"cas单点登录服务端+客户端demo"中,我们可以看到以下几个关键知识点: 1. **单点登录(SSO)**:SSO允许用户在一次登录后,能够无感知地在各个关联应用间切换,无需重新验证身份。它简化了用户的登录流程,提高...

    单点登录服务端项目cas-server

    单点登录服务端项目cas-server单点登录服务端项目cas-server 单点登录服务端项目cas-server 单点登录服务端项目cas-server 单点登录服务端项目cas-server 单点登录服务端项目cas-server 单点登录服务端项目cas-...

    CAS单点登录例子,包含服务端和客户端

    综上所述,这个压缩包提供了一个完整的CAS单点登录实例,包括服务端和客户端的实现,可以帮助开发者理解并部署自己的CAS系统。通过深入研究和实践,你可以掌握如何利用CAS实现Web应用的安全、便捷的单点登录功能。

    CAS单点登录(SSO)服务端自定义认证+CAS客户端配置+CAS完整使用文档+CAS4.2.7 cas-serv服务端源码 cas-client客户端源码

    CAS(Central Authentication Service)是Java开发的一个开源的单点登录(Single Sign-On,简称SSO)框架,主要用于解决网络应用中的身份验证问题。本压缩包提供了CAS服务端自定义认证的实现,以及CAS客户端的配置...

    cas实现单点登录服务端及客户端

    CAS(Central Authentication Service)是一种广泛使用的开放源代码的单点登录(Single Sign-On,SSO)框架,由耶鲁大学开发并维护。SSO允许用户通过一次登录验证就能访问多个应用系统,无需在每个系统之间单独进行...

    cas单点登陆服务端

    通过这个war包,开发者可以快速搭建起一个CAS服务端,并结合客户端实现单点登录功能。在部署和使用过程中,需要根据具体环境调整配置,确保与现有的系统和服务无缝对接。同时,定期关注CAS的新版本和安全更新,以...

    java-cas单点登录服务端

    单点登录(Single Sign On , 简称 SSO )是目前比较流行的服务于企业业务整合的解决...CAS Client 支持非常多的客户端(这里指单点登录系统中的各个 Web 应用),包括 Java, .Net, PHP, Perl, Apache, uPortal, Ruby 等。

    落雨博客基于CAS框架的单点登录技术讲解(ppt+code实例+doc)配套资料

    [置顶] 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包

    在"SSO之CAS单点登录客户端服务端jar包"中,包含的是实现CAS单点登录功能所需的客户端和服务端组件。这些jar包包含了以下关键知识点: 1. **CAS服务器**:这是整个SSO架构的核心,负责处理用户的登录请求,验证凭证...

    CAS服务端和客户端war包.rar

    这个压缩包“CAS服务端和客户端war包.rar”包含了实现CAS服务所需的所有核心组件和两个客户端应用,方便进行SSO环境的搭建。 1. **CAS服务器端war包(cas.war)** CAS服务器是整个SSO系统的核心,它提供认证服务,...

    cas-server,cas单点登录服务端,cas-4.1.9

    cas,4.1.9版本服务端 需要手动修改里面的数据库配置.

    cas单点登录代码例子 有文档 服务端客户端例子 亲测可用

    CAS(Central Authentication Service)是Java开发的一个开源单点登录(Single Sign-On,SSO)框架,主要用于实现用户在多个应用系统中的统一身份验证。在这个压缩包中,包含了一个CAS服务端和客户端的代码实例,...

    cas4.2.7服务端和客户端应用

    **CAS (Central Authentication Service) 知识点详解** CAS 是一个开源的身份验证框架,它允许用户通过单一登录(Single Sign-On, SSO)在多个应用系统间自由切换,无需重复登录。CAS4.2.7 版本是 CAS 的一个稳定...

    cas 普通方式和SpringBoot方式客户端 普通方式服务端

    在本文中,我们将探讨如何在普通方式和Spring Boot方式下配置和使用CAS客户端和服务端。 首先,让我们了解一下`CMD生成证书命令.txt`。在CAS部署中,安全通信通常依赖于SSL/TLS证书,用于加密传输数据。这个文件...

    CAS单点登录服务端部署包

    CAS 是 Central Authentication Service 的缩写 —— 中央认证服务,一种独立开放指令协议,是 Yale 大学发起的一个企业级开源项目,旨在为 Web 应用系统提供一种可靠的 SSO 解决方案。 CAS 支持以下特性: CAS v1, ...

    cas.rar_cas java_cas服务端代码_单点登录

    CAS(Central Authentication Service)是...综上所述,这个“cas.rar”压缩包是学习和实践CAS单点登录服务端开发的宝贵资源,通过研究其中的代码,开发者可以掌握CAS的工作原理,进而实现和定制自己的SSO解决方案。

    springmvc+spring+shiro+cas单点登录实例

    springmvc+spring+shiro+cas单点登录实例 加入了登录验证码认证,修改了下首页样式,不过样式没有弄好,很丑的,有空自己再弄下 说明:cas-server是单点登录服务端,用的是maven项目,但是WEB-INF里面的lib目录下面...

    sso/cas单点登录Java maven版 含服务端客服端

    1. SSO客户端集成在各个需要实现SSO的应用系统中,它们负责引导用户到CAS服务端进行登录,并处理服务票据。 2. 客户端通常通过CasClientFilter或Spring Security的CasAuthenticationFilter来拦截请求,判断用户是否...

    cas服务端和客户端可用代码

    3. **单点登出**(Single Logout, SLO):当用户在任一应用中登出时,客户端可以通知CAS服务端,进而实现所有应用的同步登出。 4. **配置**:客户端需要配置CAS服务器的URL、服务URL以及如何处理票据等信息,这些...

Global site tag (gtag.js) - Google Analytics