`

SSO-Cookie跨域

    博客分类:
  • Java
阅读更多

正常的cookie只能在一个应用中共享,即一个cookie只能由创建它的应用获得。
1.可在同一应用服务器内共享方法:设置cookie.setPath("/");
 本机tomcat/webapp下面有两个应用:cas和webapp_b
 1)原来在cas下面设置的cookie,在webapp_b下面获取不到,path默认是产生cookie的应用的路径。

 

 2)若在cas下面设置cookie的时候,增加一条cookie.setPath("/");或者cookie.setPath("/webapp_b/");就可以在webapp_b下面获取到cas设置的cookie了。

 

 3)此处的参数,是相对于应用服务器存放应用的文件夹的根目录而言的(比如tomcat下面的webapp),因此cookie.setPath("/");之后,可以在webapp文件夹下的所有应用共享cookie,而cookie.setPath("/webapp_b/");是指cas应用设置的cookie只能在webapp_b应用下的获得,即便是产生这个cookie的cas应用也不可以。

 

 4)设置cookie.setPath("/webapp_b/jsp")或者cookie.setPath("/webapp_b/jsp/")的时候,只有在webapp_b/jsp下面可以获得cookie,在webapp_b下面但是在jsp文件夹外的都不能获得cookie。
 

 5)设置cookie.setPath("/webapp_b");,是指在webapp_b下面才可以使用cookie,这样就不可以在产生cookie的应用cas下面获取cookie了
 

 6)有多条cookie.setPath("XXX");语句的时候,起作用的以最后一条为准。 
 

2.跨域共享cookie的方法:设置cookie.setDomain(".jszx.com");
 A机所在的域:home.langchao.com,A有应用cas
 B机所在的域:jszx.com,B有应用webapp_b
 1)在cas下面设置cookie的时候,增加cookie.setDomain(".jszx.com");,这样在webapp_b下面就可以取到cookie。


 2)这个参数必须以“.”开始。


 3)输入url访问webapp_b的时候,必须输入域名才能解析。比如说在A机器输入:http://lc-bsp.jszx.com:8080/webapp_b,可以获取cas在客户端设置的cookie,而B机器访问本机的应用,输入:http://localhost:8080/webapp_b则不可以获得cookie。


 4)设置了cookie.setDomain(".jszx.com");,还可以在默认的home.langchao.com下面共享。

 

3.自己项目中的实例代码如下:

 1)写入cookie

   String userinfo =“存储用户登录的相关信息,如:用户名,地址,联系方式......”;
   Cookie domain = new Cookie( "键名", URLEncoder.encode(userinfo,"utf-8") );
   domain.setDomain( "davinfo.com" );
   domain.setMaxAge( 3600 );
   domain.setValue( URLEncoder.encode(userinfo,"UTF-8")  );
   domain.setPath( "/" );
   getResponse().addCookie( domain );

 

 2)读取cookie

   Cookie[] cookies = ServletActionContext.getRequest().getCookies();
   Cookie cookie = null;
    boolean ifLogin = false;
    for(int i =0; i<cookies.length;i++)
     {
          cookie = cookies[i];
          if(cookie.getName().equals( Symbols.ADMIN_COOKIENAME ))
           {
              String corpid = URLDecoder.decode( cookie.getValue(), "utf-8" ).split( "," )[0];
              TbCorpInfo tbCorpInfo = new CompanyDAO().selectCompanyById( Integer.parseIn( corpid ) );
              ValueStack stack = invocation.getStack();
              stack.setValue( "company", tbCorpInfo );
              ifLogin = true;
             }
       }

      if(ifLogin)
     {
           return invocation.invoke();
      }else{
           return Action.LOGIN;
      }

    

 3)清空cookie

  Cookie domain = new Cookie( "键名", "" );
  domain.setDomain( "davinfo.com" );
  domain.setMaxAge( 0 );
  domain.setValue("" );
  domain.setPath( "/" );;
  getResponse().addCookie( domain );

 

 4)解决cookie读取乱码问题

      URLEncoder.encode(userinfo,"utf-8")   //编码

      URLDecoder.decode( cookie.getValue(), "utf-8" )   //解码

分享到:
评论

相关推荐

    sso-user-cookie.zip

    - 使用Cookie实现SSO,需要考虑跨域问题,确保所有应用系统能够访问到同一Cookie。 - 认证中心需要具备处理登录请求、验证用户凭证、生成和解析令牌的能力。 - 应用系统需要配置以信任认证中心的令牌,并能正确...

    sso-use-cookie单点登录

    在这个项目中,我们利用SpringBoot框架来实现基于Cookie的SSO。下面将详细解释这个项目的实现原理、流程以及涉及的关键技术。 一、SpringBoot与SSO结合 SpringBoot以其简洁的配置和强大的功能深受开发者喜爱,是...

    SSO完整版跨域单点登录

    SSO系统的关键技术通常包括Cookie管理、跨域通信(CORS)、安全票据加密等。为了实现跨域,可能会利用JSON Web Tokens(JWT)或OAuth 2.0等协议。同时,为了防止CSRF攻击和保护用户隐私,还需要对HTTP请求头进行严格...

    xxl-sso-master.zip

    XXL-SSO 是一个专为此目的设计的开源框架,它提供了轻量级、分布式、跨域以及对Cookie和Token的支持,适用于Web和APP应用。 1. **轻量级**:XXL-SSO 设计简洁,易于理解和部署,降低了对系统资源的需求,使得小型到...

    单点登录SSO-图示与讲解

    - **Cookie管理**:在跨域SSO场景中,Cookie的管理尤为重要。由于浏览器安全策略限制,不同一级或顶级域名下的站点无法相互读取对方设置的Cookie。因此,实现跨域SSO需要特别关注Cookie的写入、读取策略及其传递方式...

    单点登录(SSO)实现方式(附源码).doc

    本文将详细介绍SSO的基本概念及其二级域名和跨域的实现方式。 SSO的核心在于提供一种机制,使得用户在首次登录后,其身份认证信息能够被其他系统识别,从而实现无缝切换和访问。通常,SSO的实现涉及到身份验证...

    高级java笔试题-learnDoc::fire:架构师的成长之路-博客-导图

    跨域读写cookie的例子 思维导图 和java相关的 更多干货 更多干货 更多干货 分布式 实战(干货) 更多干货 spring cloud spring cloud 实战(干货) 更多干货 mybatis 更多干货 RPC spring boot spring boot 实战...

    java版飞机大战源码-learnDoc:学习文档

    跨域读写cookie的例子 思维导图 和java相关的 更多干货 更多干货 更多干货 分布式 实战(干货) 更多干货 spring cloud spring cloud 实战(干货) 更多干货 mybatis 更多干货 RPC spring boot spring boot 实战...

    java版飞机大战源码-learnDoc:架构师的成长之路

    跨域读写cookie的例子 思维导图 和java相关的 更多干货 更多干货 更多干货 分布式 实战(干货) 更多干货 spring cloud spring cloud 实战(干货) 更多干货 mybatis 更多干货 RPC spring boot spring boot 实战...

    cross-domain-sso:跨域单点登录案例研究

    2. **票据存储**:浏览器将这个票据存储在Cookie或者LocalStorage中,确保在后续的跨域请求中可以携带。 3. **跨域请求**:当用户访问另一个子域(如sub.example.com)时,浏览器会自动将主域的票据发送到该子域。 ...

    SSO单点登录【基于cookie二级域名下跨域共享】

    在基于Cookie的二级域名下跨域共享SSO实现中,核心概念是利用Cookie的特性来实现用户身份的共享与传递。 首先,我们了解SSO的工作原理。当用户首次访问一个应用系统(例如,`app1.example.com`)时,如果用户尚未...

    SSO跨域读写cookie

    单机模拟多台主机,跨域写cookie场景

    SSO 单点登录(java)

    5. **跨域访问(Cross-Origin Resource Sharing, CORS)**:在实现SSO时,特别是Web应用,可能会遇到跨域问题。通过配置CORS策略,可以让不同源的请求被服务器接受,使得SSO能够在不同的域名之间顺利进行。 6. **...

    浅谈谁都能看懂的单点登录(SSO)实现方式(附源码)

    文章中提到的跨域SSO设计思路分为SSO-Server和SSO-Client两部分,SSO-Server作为中央认证节点,负责用户登录、注销、Token分配及验证等工作,而SSO-Client则负责请求SSO-Server以获得用户身份验证信息。 #### SSO-...

    跨域点单登录源码SSO_cross_domain

    跨域点单登录源码SSO_cross_domain是一个用于实现单点登录(Single Sign-On, SSO)的项目,主要解决了用户在多个域名之间切换时无需重复登录的问题。在这个项目中,我们将探讨三个核心概念:跨域、点单登录以及SSO。...

    ASP.NET跨域SSO解决方案

    ### ASP.NET跨域SSO解决方案 #### 一、引言 在现代企业级应用开发中,随着业务系统越来越复杂,各个子系统之间的交互也日益频繁。为了提高用户体验并简化管理流程,单点登录(Single Sign-On,简称SSO)成为了一个...

    完全跨域SSO

    在这个“完全跨域SSO”实现中,我们将探讨如何跨越不同的域名或子域名实现SSO功能,这对于大型企业或拥有多个子网站的组织来说尤其重要。 首先,我们需要理解SSO的核心概念:票据(Ticket)。在SSO流程中,用户首次...

    .net单点登录(SSO)

    4. **跨域Session验证**:由于不同的系统可能位于不同的域名下,因此需要解决跨域问题。这通常通过共享Cookie或者使用JSON Web Token (JWT) 实现。 5. **协议支持**:常见的 SSO 协议有 SAML(Security Assertion ...

    sso实现跨域登录实例,确实不错哦。

    在"SSO实现跨域登录实例"中,我们主要探讨的是如何让不同的Web应用程序在同一个登录会话下共享用户的身份信息,从而实现在不同域名或路径下的无缝切换。这个实例是基于VS2008开发的,这表明我们将关注的是.NET ...

Global site tag (gtag.js) - Google Analytics