`
happyqing
  • 浏览: 3198369 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

sso单点退出的问题,只自己应用退出了,

    博客分类:
  • cas
阅读更多

版本

cas-server-3.5.0

cas-client-3.2.1

研究cas的相关搜索关键字

cas ticket

cas login-webflow.xml

 

在退出地址列表中url后带上/

<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean" lazy-init="false">
    <property name="staticMethod" value="cn.ql.sso.auth.SignoutServers.setServers" />
    <property name="arguments">
		<list>
			<value>http://192.168.2.3:8080/Plat/</value>
			<value>http://192.168.2.3:8080/base/</value>
			<value>http://192.168.2.5:8080/Plat/</value>
			<value>http://192.168.2.5:8080/base/</value>
		</list>
    </property>
</bean>

 

其他说明:

org.jasig.cas.web.LogoutController.java

protected ModelAndView handleRequestInternal(
        final HttpServletRequest request, final HttpServletResponse response)
        throws Exception {
        final String ticketGrantingTicketId = this.ticketGrantingTicketCookieGenerator.retrieveCookieValue(request);
        final String service = request.getParameter("service");

        if (ticketGrantingTicketId != null) {
            this.centralAuthenticationService
                .destroyTicketGrantingTicket(ticketGrantingTicketId);

            this.ticketGrantingTicketCookieGenerator.removeCookie(response);
            this.warnCookieGenerator.removeCookie(response);
        }

        if (this.followServiceRedirects && service != null) {
            return new ModelAndView(new RedirectView(service));
        }

        return new ModelAndView(this.logoutView);
    }

 

sso发退出请求

org.jasig.cas.util.HttpClient.java

private Boolean call(String server) {
            HttpURLConnection connection = null;
            BufferedReader in = null;
            try {
                if (log.isDebugEnabled()) {
                    log.debug("Attempting to access " + server);
                }
                final URL logoutUrl = new URL(server);
                final String output = "logoutRequest=" + URLEncoder.encode(message, "UTF-8");

                connection = (HttpURLConnection) logoutUrl.openConnection();
                connection.setDoInput(true);
                connection.setDoOutput(true);
                connection.setRequestMethod("POST");
                connection.setReadTimeout(readTimeout);
                connection.setConnectTimeout(connectionTimeout);
                connection.setRequestProperty("Content-Length", Integer.toString(output.getBytes().length));
                connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
                final DataOutputStream printout = new DataOutputStream(connection.getOutputStream());
                printout.writeBytes(output);
                printout.flush();
                printout.close();

                in = new BufferedReader(new InputStreamReader(connection.getInputStream()));

                while (in.readLine() != null) {
                    // nothing to do
                }

                if (log.isDebugEnabled()) {
                    log.debug("Finished sending message to" + url);
                }
                return true;
            } catch (final SocketTimeoutException e) {
                log.warn("Socket Timeout Detected while attempting to send message to [" + url + "].");
                return false;
            } catch (final Exception e) {
                log.warn("Error Sending message to url endpoint [" + url + "].  Error is [" + e.getMessage() + "]");
                return false;
            } finally {
                if (in != null) {
                    try {
                        in.close();
                    } catch (final IOException e) {
                        // can't do anything
                    }
                }
                if (connection != null) {
                    connection.disconnect();
                }
            }
        }

 

客户端,接收退出请求
org.jasig.cas.client.session.SingleSignOutFilter

public void doFilter(final ServletRequest servletRequest, final ServletResponse servletResponse, final FilterChain filterChain) throws IOException, ServletException {
        final HttpServletRequest request = (HttpServletRequest) servletRequest;

        if (handler.isTokenRequest(request)) {
            handler.recordSession(request);
        } else if (handler.isLogoutRequest(request)) {
            handler.destroySession(request);
            // Do not continue up filter chain
            return;
        } else {
            log.trace("Ignoring URI " + request.getRequestURI());
        }

        filterChain.doFilter(servletRequest, servletResponse);
    }

 

 参考:

http://www.iteye.com/topic/1129751

 

 

分享到:
评论

相关推荐

    单点登陆实现(完全跨域、单点退出)

    单点退出意味着用户在一处登出时,所有关联的应用系统都会同步注销该用户的登录状态。这通常通过在注销时清除Memcached中的登录状态,以及通知其他系统更新用户状态来实现。这样可以提高系统的安全性,防止用户在一...

    sso单点登录

    只需要修改 casClientConfig casServerUrlPrefix="http://localhost:8442/cas/" serverName="localhost:20950" 里面对应的值 casServerLoginUrl 是CAS服务器登录的地址; casServerUrlPrefix 是CAS服务器地址 ...

    sso单点学习demo

    这个压缩包文件"SSO单点学习demo"提供了一个学习SSO技术的实践环境,包含了sso-server(服务端)、sso-oa(办公应用客户端)和sso-pro(专业应用客户端)三个关键组成部分,对于初学者来说,这是一个很好的起点。...

    SSO单点登录

    ### SSO单点登录概述 #### 什么是SSO单点登录? SSO(Single Sign-On,单点登录)是一种身份验证机制,允许用户通过一次登录即可访问所有相互信任的应用系统,而无需重复输入用户名和密码。这种机制极大地提高了...

    SSO单点登录.zip

    在给定的压缩包"SSO单点登录.zip"中,包含了一个名为"sso-dandiandenglu-demo-master"的项目源码,这应该是一个SSO的示例项目,适合毕业生进行毕业设计学习和实践。 这个项目提供了完整的源代码和部署教程,可以在...

    cas sso单点登录已搭建好的源码-内含客户端和服务端

    4. 退出逻辑:实现单点登出功能,当用户在一个应用中注销时,客户端会通知其他应用同步注销状态。 在源码中,开发者可以深入理解CAS SSO的工作流程,包括: - 如何配置CAS服务器,设置认证源和策略。 - 客户端如何...

    JEECG 单点登录说明文档

    单点登录是一种用户登录认证方法,允许用户在多个应用系统中,只通过登录一次就可以访问所有相互信任的应用系统。这对于提升用户体验和简化系统安全管理都非常重要。 Kisso的特性包括“无状态”和“分散验证”。在...

    基于cas的sso 单点登录tomcat配置过程

    7. **退出SSO**:为了实现单点登出,需要在应用中添加一个登出链接,点击后将用户从CAS服务器中注销,同时清除应用中的会话信息。 8. **测试SSO功能**:完成上述配置后,重启Tomcat服务器,尝试访问应用中的受保护...

    windchill单点登陆使用的类

    为了适用现代企业的系统整合适用,很多企业会使用SSO单点登陆,统一管理企业用户。在此背景下,基于windchill的认证重构,实现单点登陆,借此文章与大家分享。此次使用的认证系统是windchill 10.2, 实现方式在...

    sso单点登录之cas配置全过程

    此文档自己亲手从0开始一步一步配置的详尽过程,其中包括keytool创建 、ticket、tomcat配置cas、自定义登录页面,处理服务器返回的乱码,服务退出、cas服务器返回多数据等等文档 包括SSO原理图,以及认证流程图等

    java单点登录的实现与应用整合中SSO的技术实现.rar

    3. **单点退出**:实现单点登录的同时,也要提供单点退出功能,让用户能够一键退出所有已登录的应用。 4. **异常处理**:处理认证失败、票证过期等各种异常情况,提供友好的错误提示。 总之,Java SSO的实现涉及多...

    淘淘商城-SSO接口.docx

    ### 淘淘商城单点登录(SSO)接口解析 #### 一、概述 随着互联网技术的发展,用户体验逐渐成为衡量一个网站或应用成功与否的重要标准之一。为了提高用户体验,简化用户的登录过程,单点登录(Single Sign-On,简称...

    SSO单点登入,使用cookie实习(Struts2)

    SSO(Single Sign-On)单点登录是一...总之,SSO单点登录不仅提高了用户体验,也简化了企业的身份管理。在Struts2框架下,通过合理的设计和编程,我们可以构建一个高效、安全的SSO解决方案,实现跨系统的无缝登录体验。

    discuz x2.5和cas集成,实现cas单点登录 sso

    X2.5与CAS(Central Authentication Service)集成是一种常见的身份验证解决方案,它能够实现单点登录(Single Sign-On, SSO)功能。在SSO系统中,用户只需登录一次,就可以在多个相互独立的应用系统之间自由切换,...

    Oauth2-SSO:使用Oauth2实现的SSO单点登录登出,模拟微信QQ授权码模式授权资源访问

    原作者没有实现单点退出功能,再次基础上实现了单点退出: 原理就是每一个sso客户端退出时候,添加Redis保存当前退出的用户名。每个系统实现切面aspect注解添加到控制器上面,每个请求根据当前系统的用户名去纠正...

    单点登陆(sso+shiro+cas)

    单点登录(Single Sign-On,简称SSO)是一种在多应用环境中实现用户只需一次登录就能访问所有系统的身份验证机制。SSO技术简化了用户的登录流程,提高了用户体验,同时也能强化安全控制,统一管理用户权限。在Java...

    单点登录系统 SSO 设计说明书

    单点登录系统 SSO 设计说明书 本文档旨在描述单点登录系统(SSO)的设计说明书,旨在提供一个完整、可行的解决方案,以满足集团网站的身份验证需求。单点登录系统的主要目标是提供一个统一的身份验证入口,实现成员...

    单点登录,简称为 SSO

    单点登录(Single Sign-On,简称SSO)是一种网络身份验证机制,允许用户在一次登录后,无需再次输入凭证即可访问多个相互关联的应用系统。这种技术显著提升了用户体验,减少了密码管理的复杂性,并有助于增强安全性...

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

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

Global site tag (gtag.js) - Google Analytics