Spring Security 如何在Tomcat6中将会话cookie标记为安全(仅限https)

5gfr0r5j  于 2023-08-05  发布在  Spring
关注(0)|答案(1)|浏览(94)

我在谷歌上搜索了很多,但找不到答案。我尝试在war中的web.xml文件中设置以下内容,没有任何影响:

<session-config>
    <session-timeout>60</session-timeout>
    <cookie-config>
        <http-only>true</http-only>
        <secure>true</secure>
    </cookie-config>
</session-config>

字符串
在tomcatcontext.xml文件中添加useHttpOnly可以将cookie限制为仅限于http,但我仍然需要使它们安全。

hfwmuf9z

hfwmuf9z1#

你什么都不用做只要启动会话的请求是https,Tomcat就会将会话cookie标记为secure
我也看了看是否有任何正式记录这一事实,但我找不到它。但这至少是Tomcat 6.0.32及更高版本的行为。
下面是来自org/apache/catalina/connector/Request.java的代码,在方法的最后,检查请求是否安全,如果是,则在cookie上设置secure标志:

/**
 * Configures the given JSESSIONID cookie.
 *
 * @param cookie The JSESSIONID cookie to be configured
 */
protected void configureSessionCookie(Cookie cookie) {
    cookie.setMaxAge(-1);

    Context ctxt = getContext();

    String contextPath = null;
    if (ctxt != null && !getConnector().getEmptySessionPath()) {
        if (ctxt.getSessionCookiePath() != null) {
            contextPath = ctxt.getSessionCookiePath();
        } else {
            contextPath = ctxt.getEncodedPath();
        }
    }
    if ((contextPath != null) && (contextPath.length() > 0)) {
        cookie.setPath(contextPath);
    } else {
        cookie.setPath("/");
    }

    if (ctxt != null && ctxt.getSessionCookieDomain() != null) {
        cookie.setDomain(ctxt.getSessionCookieDomain());
    }

    if (isSecure()) {
        cookie.setSecure(true);
    }
}

字符串
更新:您可以手动尝试通过使用过滤器等自行设置此。您可以检查从set 'secure' flag到JSESSION id cookie的示例

相关问题