public void testSend(HttpServletResponseresponse) {
try {
CookieManager manager=new CookieManager();
manager.setCookiePolicy(CookiePolicy.ACCEPT_ALL);
CookieHandler.setDefault(manager);
URL url=new URL("获取cookie的url");
HttpURLConnection conn= (HttpURLConnection) url.openConnection();
conn.getHeaderFields();
CookieStore store= manager.getCookieStore();
List<HttpCookie> cookies=store.getCookies();
Cookie token=null;
for(HttpCookie cookie: cookies){
if(token== null && "token".equals(cookie.getName())){
token= new Cookie(cookie.getName(),cookie.getValue());
log.info("token:",token);
token.setHttpOnly(true);
//token.setDomain(cookie.getDomain());
token.setDomain("mdp.cpihz.com.cn");
token.setMaxAge(Integer.parseInt(String.valueOf(cookie.getMaxAge())));
token.setComment(cookie.getComment());
token.setPath(cookie.getPath());
token.setSecure(cookie.getSecure());
token.setVersion(cookie.getVersion());
}
}
manager.getCookieStore().removeAll();
response.addCookie(token);
response.sendRedirect("targetUrl");
} catch (IOExceptione) {
e.printStackTrace();
}
}
程序存在几个可能的问题
1、认证程序返回的cookie的Domain必须要和newurl的Domain匹配
2、当前程序的Domain也要和newurl的Domain匹配
也就是说3者的Domain必须是匹配的,因为你返回后的cookie是存在当前response里面的,Redirect到目标地址必须是相同Domain才能获取到你保存的cookie。
3、你向response中添加cookie后,必须要这次响应回客户端,然后客户端再次发起访问,这个cookie才会生效。但Redirect跳转也是需要响应到客户端后然后再跳转的,但我不确定它是否带上了新的cookie。你可以用浏览器的开发人员工具查看一下。