基于Cookie跨域的单点登录问题

时间:2024-03-02 17:25:01
由于项目中,需要用的单点登录,主要的思路是:系统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