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


由於項目中,需要用的單點登錄,主要的思路是:系統1:用戶名密碼-->寫入Cookie-->其他系統讀取Cookie。
1、在同一個服務器下的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。

2、跨域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

 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM