我必须从响应中删除cookie并重定向回相同的请求url。我最近升级到tomcat 9,并开始使用legacycookieprocessor来避免无效域错误。但由于某些原因,我无法删除cookie并重定向到同一url,而后续调用在请求中没有cookie。
下面是我用来删除cookie的代码:
public static void removeCookie(String name, HttpServletRequest req, HttpServletResponse res) {
boolean isSecure = req.isSecure();
String domain = getDomain(req);
String path = "/";
String cookieName = getTicketCookiePrefix() + name;
addCookie(req, res, cookieName, "", 0, path, domain, isSecure);
Cookie[] cookies = req.getCookies();
if (cookies != null) {
Cookie[] var8 = cookies;
int var9 = cookies.length;
for(int var10 = 0; var10 < var9; ++var10) {
Cookie cookie = var8[var10];
if (cookie.getName().equals(cookieName)) {
cookie.setValue("");
}
}
}
}
public static void addCookie(HttpServletRequest request, HttpServletResponse response, String name, String value, int cookielife, String path, String domain, boolean secure) {
Cookie ck = createCookie(name, encodeCookieValue(value));
if (path != null) {
ck.setPath(path);
}
if (domain != null) {
ck.setDomain(domain);
}
ck.setMaxAge(cookielife);
ck.setSecure(secure);
response.addCookie(ck);
}
请让我知道,我们需要对旧版cookie处理器执行任何不同的操作来删除cookie。
1条答案
按热度按时间ahy6op9u1#
问题陈述:用户代理(ie)无法使用“设置cookie”标头处理(删除)cookie
tomcat 8和9之间的相关差异:
雄猫8
legacycookieprocessor是默认的cookie处理器
tomcat vm param fwd_slash_is_分隔符具有重要意义
严格遵守rfc2109
雄猫9
rfc6265cookieprocessor是默认的cookie处理器
tomcat vm param fwd_slash_is_分隔符没有意义
cookie处理器之间的相关差异:传统cookie解析算法通过几个系统属性仅支持有限的全局配置。这些系统属性仍然受支持,但将被弃用以支持此新配置元素。参考:tomcat-8.0,tomcat-8.5
LegacyCookie处理器
在以下情况下实现对cookie规范的严格解释:
严格遵守rfc2109是正确的
RFC6265处理器
可互操作,但不允许使用点(.)
使用的组合:tomcat9+LegacyCookie处理器
如果strict_servlet_compliance设置为true,则fwd_slash_is_separator的隐式值也设置为true
和“/”(正斜杠)字符将被视为分隔符
“如果引用path属性作为严格遵守规范的要求,某些浏览器将无法处理cookie”
通常我们运行tomcat时使用以下命令:org.apache.catalina。strict_servlet_compliance=true,org.apache.tomcat.util.http.servercookie.fwd_slash_is_separator=false
因此,为了改变这种行为,在legacycookieprocessor中使用forwardslashisseparator属性,而不是tomcat 9中的fwd_slash_is_separator
解决方案:将vm param fwd_slash_is_分隔符替换为context.xml/cookieprocessor下的legacycookieprocessor.forwardslashisseparator属性
参考:rfc2109-https://www.ietf.org/rfc/rfc2109.txt rfc6265-https://www.ietf.org/rfc/rfc6265.txt