`

单点登录 - CAS【五】单点登出

 
阅读更多

一、配置客户端Web.xml

      

<!-- 用于单点退出,该过滤器用于实现单点登出功能  -->
	<listener>
		<listener-class>org.jasig.cas.client.javafilter.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 Single Sign Out Filter之前,想做点别的事情,我们可以自定义个servlet

<!-- 用户登出 -->
	<servlet>
		<servlet-name>LogOutServlet</servlet-name>
		<servlet-class>com.wy.cas.client.servlet.LogOutServlet</servlet-class>
		<init-param>
			<param-name>serverLogoutUrl</param-name>
			<param-value>https://sso.wy.com:8443/cas-server/logout</param-value>
		</init-param>
		<init-param>
			<param-name>serverName</param-name>
			<param-value>http://127.0.0.1:8081/cas-test</param-value>
		</init-param>
	</servlet>
	<servlet-mapping>
		<servlet-name>LogOutServlet</servlet-name>
		<url-pattern>/logout</url-pattern>
	</servlet-mapping>

 

说明:登出为什么要使用https协议?

    我们可以在ticketGrantingTicketCookieGenerator.xml找到原因:

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">
	<description>
		Defines the cookie that stores the TicketGrantingTicket.  You most likely should never modify these (especially the "secure" property).
		You can change the name if you want to make it harder for people to guess.
	</description>
	<bean id="ticketGrantingTicketCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"
		p:cookieSecure="true"
		p:cookieMaxAge="-1"
		p:cookieName="CASTGC"
		p:cookiePath="/cas" />
</beans>

 p:cookieSecure="true",作用就是要求客户端和Cas Server之间通过HTTPS或者其它安全协议传递数据。

cookie的Secure属性,只能保证cookie与Cas Server服务器之间的数据传输过程加密,而保存在本地的cookie文件并不加密。

 

如果我们不是HTTPS协议进行登出,就会发现登出是不会成功的。通过fireBug查看提交的内容时,发现注销时,并没有相关的cookie。

二、登出成功后,重定向到登录页面

    在cas-servlet.xml中,logoutController的p:followServiceRedirects="${cas.logout.followServiceRedirects:false}"默认是false

我们只需要修改为true,然后在业务系统的注销连接中加入"service参数",值为业务系统的绝对URL,这样就OK了,如:https://sso.wy.com:8443/cas-server/login?service=http://127.0.0.1:8081/cas-test

<bean id="logoutController" class="org.jasig.cas.web.LogoutController"
        p:centralAuthenticationService-ref="centralAuthenticationService"
        p:logoutView="casLogoutView"
        p:warnCookieGenerator-ref="warnCookieGenerator"
        p:ticketGrantingTicketCookieGenerator-ref="ticketGrantingTicketCookieGenerator"
        p:servicesManager-ref="servicesManager"
        p:followServiceRedirects="${cas.logout.followServiceRedirects:true}"/>

 

 

三、自定义Servlet

public class LogOutServlet extends javax.servlet.http.HttpServlet{
	private static final long serialVersionUID = 1L;
       
	
    /**
     * @see HttpServlet#HttpServlet()
     */
    public LogOutServlet() {
        super();
    }
    
    public static String serverLogoutUrl = "";
    
    public static String serverName = "";

    public void init() throws ServletException {
    	serverLogoutUrl = this.getInitParameter("serverLogoutUrl");
    	serverName = this.getInitParameter("serverName");
     }
	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		this.doPost(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		UserInfo user = new UserInfo();
		response.sendRedirect(serverLogoutUrl + "?service=" + serverName + "&username=" + user.getIscUserSourceId());
	}
	

}

 

 

分享到:
评论
1 楼 xiaobadi 2014-08-28  
怪不得,我现在做测试还没有导入证书,单点退出时,虽然casserver已经退出了,但是业务系统照样可以访问,关掉浏览器再打开业务系统就不能访问了。

相关推荐

    单点登入--CAS3.0

    - CAS还支持单点登出功能,用户在一处登出时,其他所有受CAS保护的应用也会同步登出。 10. **CAS客户端**: - 客户端库可以简化与CAS服务器的集成,例如Java、.NET、PHP、Python等都有相应的客户端库。 综上所述...

    cas单点登出的3个类

    在CAS单点登出过程中,当用户在主应用中登出时,CAS服务器会利用类似这样的客户端向其他已登录的应用发送登出请求,通知它们用户已经登出。 2. **NewSingleSignOutFilter.java**:这是一个过滤器类,可能是对CAS...

    基于Cas的单点登录实现

    **基于Cas的单点登录实现** 单点登录(Single Sign-On,简称SSO)是一种在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统的技术。它为用户提供了一种方便、高效的访问多系统的方式,同时减少...

    用cas实现mantis单点登录和登出

    ### 使用 CAS 实现 Mantis 单点登录与登出 #### 概述 单点登录(Single Sign-On,简称 SSO)是一种常见的身份认证模式,它允许用户在多个应用程序和服务中仅通过一次登录就能访问所有相关系统而无需多次输入密码。...

    Java进阶SSO单点登录技术CAS-快速上手与原理探究视频教程

    3、 单点登录和单点登出的实现和测试 4、 单点登录、登出的原理探究等 知识点 l 相关概念或术语:SSO、CAS、TGT、TGC、ST l CAS Server服务端的搭建和配置 l CAS Client客户端的搭建和配置 l 单点登录的测试 l 单点...

    cas实现单点登录,登出(java和php客户端)

    总之,CAS单点登录系统为多应用环境提供了一种高效的身份验证解决方案。通过Java和PHP客户端的集成,可以在多种技术栈的项目中实现一致的用户体验,同时也简化了用户管理和权限控制。在实际应用中,应根据项目需求...

    cas单点才登出原理

    接下来,我们将详细探讨CAS单点登出的原理。 首先,理解SSO的基本流程: 1. 用户打开一个受CAS保护的应用系统A。 2. 应用系统A发现用户未登录,重定向到CAS服务器。 3. 用户在CAS服务器上输入凭证并验证通过。 4. ...

    CAS单点登录demo

    6. CAS单点登出: - 当用户在任一应用系统中登出时,CAS Server会清除所有已签发的Ticket,确保用户在所有系统中都被登出。 通过这个“CAS单点登录demo”,你可以学习并实践如何设置和配置CAS环境,理解其工作流程...

    CAS单点登录SSO( Single Sign-On)

    CAS单点登录协议是解决多应用系统认证问题的有效方案。通过深入学习和理解CAS的工作机制,开发者能够更好地实现和维护安全、高效的SSO系统。同时,源码分析有助于定制化需求和故障排查,确保CAS在实际环境中的稳定...

    cas单点登录登出配置demo

    cas单点登录登出配置 php 和java 版本。 完美实现了登录和登出, demo cas server 3.5.2 版本 -- 扔到tomcat下直接跑。 java客户端为 3.2.1. -- 要想跑的话需要自己下载jar php 扔到php工程里面直接跑。。 记得看...

    完整的单点登录功能

    - **单点登出(Single Sign-Out, SSO)**:当用户在任一系统中登出时,应同步更新所有关联系统的登录状态。 - **跨域认证**:在多域名环境下,SSO需要处理跨域认证问题,这通常通过设置合适的HTTP头或使用iframe来...

    Java单点登录系统 JA-SIG CAS

    - 单点登出(Single Logout,SLO)的实现 - CAS的安全性和最佳实践 通过学习这些文档,你可以深入了解如何在你的Java项目中实施JA-SIG CAS,以构建一个高效、安全的单点登录系统。同时,这些资料也可能涵盖了一些...

    小蚂蚁-CAS单点登录系列(3)-简单实施SSO

    【标题】:“小蚂蚁-CAS单点登录系列(3)-简单实施SSO” 单点登录(Single Sign-On,简称SSO)是一种网络身份验证机制,它允许用户在多个应用程序之间共享登录状态,只需要进行一次身份验证。在这个系列的第三部分中...

    CAS多数据库配置单点登录

    五、CAS单点登录优势 CAS单点登录具有以下优势: 1. 单点登录:CAS提供了单点登录的功能,用户只需登录一次,即可访问多个应用程序。 2. 安全性:CAS提供了强大的身份验证服务,确保了用户的身份安全。 3. 可靠性...

    .net-casSSO-client.rar

    .NET CAS SSO客户端是一款专为.NET开发者设计的身份验证解决方案,它允许用户通过中央认证服务(Central Authentication Service,简称CAS)实现单点登录(Single Sign-On,简称SSO)。CAS是一种开放源码的Web身份...

    cas .net单点登录

    本示例将详细介绍如何在.NET项目中集成CAS单点登录。 首先,我们需要理解单点登录的概念。单点登录允许用户在一个系统中登录后,可以无须再次认证即可访问其他相互信任的系统,提高了用户体验和安全性。CAS作为一个...

    CAS单点登录实例

    8. **单点登出(Single Sign-Out,SSO)**:除了单点登录,CAS还提供了单点登出功能,允许用户在一处登出后,自动从所有已登录的应用中注销。 9. **自定义扩展**:CAS设计为高度可扩展,允许开发人员根据需求定制...

Global site tag (gtag.js) - Google Analytics