基於Cookie跨域的單點登陸問題

因爲項目中,須要用的單點登陸,主要的思路是:系統1:用戶名密碼-->寫入Cookie-->其餘系統讀取Cookie。
一、在同一個服務器下的Cookie共享
@Component("userLoginAction")
@Namespace("/userLogin")
@ParentPackage("json-default")
public class UserLoginAction extends ActionSupport{
    @Action(value="saveCookie",results={
            @Result(name=SUCCESS,location="/WEB-INF/page/success.ftl")    
        })
    public String saveCookie(){
        Cookie cook=new Cookie("userName","lisi");
        cook.setPath("/");
        cook.setMaxAge(-1);
        ServletActionContext.getResponse().addCookie(cook);
        return SUCCESS;
    }
}

 

cook.setPath("/");設置在同一個webapp下
cook.setMaxAge(-1);設置關閉瀏覽器後清除Cookie。

二、跨域Cookie共享,首先這裏說的Cookie跨域不是跨多域,而是跨子域。
在host文件中設置本地域名。
package cn.action;

import javax.servlet.ServletContext;
import javax.servlet.http.Cookie;

import org.apache.struts2.ServletActionContext;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;
import org.springframework.stereotype.Component;

import com.opensymphony.xwork2.ActionSupport;

@Component("userLoginAction")
@Namespace("/userLogin")
@ParentPackage("json-default")
public class UserLoginAction extends ActionSupport{
    @Action(value="saveCookie",results={
            @Result(name=SUCCESS,location="/WEB-INF/page/success.ftl")    
        })
    public String saveCookie(){
        Cookie cook=new Cookie("userName","lisi");
        cook.setPath("/");
        cook.setMaxAge(-1);
        cook.setDomain(".demo.com");
        ServletActionContext.getResponse().addCookie(cook);
        return SUCCESS;
    }
}

 

cook.setDomain(".demo.com");設置的共享子域名 .demo.com
就ok了。在瀏覽器中能夠查看到該Cookie

相關文章
相關標籤/搜索