使用 javax.servlet 2.5 设置一个 httponly cookie

2022-09-01 20:59:41

下面是一个设置 cookie 的函数:

public void addCookie(String cookieName, String cookieValue, Integer maxAge, HttpServletResponse response) {
    Cookie cookie = new Cookie(cookieName, cookieValue);
    cookie.setPath("/mycampaigns");
    cookie.setSecure(isSecureCookie);
    cookie.setMaxAge(maxAge);
    response.addCookie(cookie);
}

我相信在servlet 3.0中,有一种方法可以直接做到这一点。不幸的是,我的组织使用2.5,此时升级不是一个选项。

有没有办法使用响应来设置cookie?这是我在网上找到的一个例子

response.setHeader("SET-COOKIE", "[SOME STUFF]" +"; HttpOnly")

如果这是做我想做的事情的唯一方法,我会用什么来替换“[SOME STUFF]”,这样我就不会丢失我的函数当前存储在cookie中的任何数据?


答案 1

你是对的,手动设置标题是实现目标的正确方法。

您还可以使用javax.ws.rs.core.NewCookie或任何其他带有有用toString方法的类将cookie打印到标头,以使事情变得更加简单。

public static String getHttpOnlyCookieHeader(Cookie cookie) {

    NewCookie newCookie = new NewCookie(cookie.getName(), cookie.getValue(), 
            cookie.getPath(), cookie.getDomain(), cookie.getVersion(), 
            cookie.getComment(), cookie.getMaxAge(), cookie.getSecure());

    return newCookie + "; HttpOnly";
}

用法:

response.setHeader("SET-COOKIE", getHttpOnlyCookieHeader(myOriginalCookie));

答案 2

此代码无需使用 :response.setHeader()

public void addCookie(String cookieName, String cookieValue, Integer maxAge, HttpServletResponse response) {  
    Cookie cookie = new Cookie(cookieName, cookieValue);
    cookie.setPath("; HttpOnly;");
    cookie.setSecure(isSecureCookie);
    cookie.setMaxAge(maxAge);
    response.addCookie(cookie);
}

推荐