跨域訪問cookie同步

最近開發smain遇到的問題,因爲是前後端分離,而後端服務有多個(目前有control/oms/wms),所以不同的模塊訪問的

服務是不同的。雖然shiro和redis做了集成,session已經可以共享,但是不同的服務因爲域名不同,導致訪問不同的服務

是cookie不一樣。其實可以使用cas單點登陸解決,不過暫時不想做集成,選擇一個比較取巧的方式實現。

如下:不同的模塊訪問的後端的服務是獨立部署的

登陸成功後將sessionId 和 服務列表返回到前端

subject.login(token); 
Object cookie = SecurityUtils.getSubject().getSession().getId();
Map<String,Object> results = new HashMap<String,Object>();
results.put("cookie", cookie.toString());
List<Object[]> nodes = this.createQuery("SELECT node.code,node.host FROM ServiceNode node");
results.put("nodes", nodes);

前端接受到後,分別訪問每個服務的 sso

@RequestMapping(value="/sso")
public ResponseResult login(String cookieValue, String path){
        Cookie cookie = new Cookie("appKey",cookieValue);
        cookie.setPath("/"+path);
        response.addCookie(cookie);
        return new ResponseResult();
 }

 如此每個域名的 cookie都保持一致了,每次請求服務 jsessionid 的值都是一樣。

如下:兩個appKey(jsessionid)是一樣的。

注意:cookie.setPath("/"+path) 這裏的path一定要和 下圖中的path保持一直。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章