无法使用legacycookieprocessor从响应中删除cookie并重定向到相同的原始url

to94eoyn  于 2021-10-10  发布在  Java
关注(0)|答案(1)|浏览(515)

我必须从响应中删除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。

ahy6op9u

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属性

<CookieProcessor className="org.apache.tomcat.util.http.LegacyCookieProcessor" forwardSlashIsSeparator="false"/>

参考:rfc2109-https://www.ietf.org/rfc/rfc2109.txt rfc6265-https://www.ietf.org/rfc/rfc6265.txt

相关问题