java跨域cookie共享_cookie跨域共享 - qijian0503的个人空间 - OSCHINA - 中文开源技术交流社区...
問題描述
需要解決前端pc跟服務(wù)端(java),跨域后都能獲取到同一個cookie。
使用二級域名共享cookie有一個限制條件,就是兩個域名的二級域名必須相同
前端pc訪問域名:a.b.com
后端接口域名:a-gateway.b.com
這兩個域名同屬一個二級域名:b.com
跨域訪問
服務(wù)器nginx增加以下配置,即可解決跨域訪問的問題。也可以在程序中通過代碼解決跨域訪問。
nginx配置文件
location / {
#是否允許跨域發(fā)送Cookie
add_header Access-Control-Allow-Credentials true;
add_header Access-Control-Allow-Origin 'http://a.b.com';
add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
if ($request_method = 'OPTIONS') {
return 204;
}
}
跨域攜帶發(fā)送cookie
如果需要允許跨域攜帶發(fā)送cookie的話,nignx則需要以下參數(shù)配置
nginx配置
"Access-Control-Allow-Credentials":可選字段。它的值是一個布爾值,表示是否允許發(fā)送Cookie。默認情況下,Cookie不包括在CORS請求之中。設(shè)為true,即表示服務(wù)器明確許可,Cookie可以包含在請求中,一起發(fā)給服務(wù)器。這個值也只能設(shè)為true,如果服務(wù)器不要瀏覽器發(fā)送Cookie,刪除該字段即可。
對于附帶身份憑證的請求,服務(wù)器不得設(shè)置 Access-Control-Allow-Origin 的值為'*'。這是因為請求的首部中攜帶了Cookie信息,如果 Access-Control-Allow-Origin 的值為'*',請求將會失敗。而將 Access-Control-Allow-Origin 的值設(shè)置為 http://a.b.com,則請求將成功執(zhí)行。也就是說Access-Control-Allow-Credentials設(shè)置為true的情況下 Access-Control-Allow-Origin不能設(shè)置為*。
前端配置
以vue請求為例:
import axios from 'axios';
axios.defaults.withCredentials=true //允許攜帶cookie
java設(shè)置cookie
public static void addCookie(HttpServletResponse response,String cookieName,String cookieValue,int maxAge){
Cookie cookie =new Cookie(cookieName,cookieValue);
cookie.setDomain("b.com");//指定域名
cookie.setPath("/");//設(shè)置cookie的生命周期
cookie.setHttpOnly(false);
if(maxAge>0){
cookie.setMaxAge(maxAge);
}
response.addCookie(cookie);
}
總結(jié)
以上是生活随笔為你收集整理的java跨域cookie共享_cookie跨域共享 - qijian0503的个人空间 - OSCHINA - 中文开源技术交流社区...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iOS6.1/iOS6.0.1完美越狱迟
- 下一篇: 美剧中的英文粗语脏话知多少?