在Tomcat中进行身份验证后,如何更改Jsession ID?

时间:2018-07-12 19:16:13

标签: java tomcat9

我们正在使用Tomcat 9.0.7,并且要求在验证用户身份后更改Jsession-ID。

有什么办法可以做到这一点?

1 个答案:

答案 0 :(得分:0)

不仅有这样做的方法,出于安全原因,这实际上是推荐的做法。

在这里,您会发现一个来自开源应用程序的片段,称此功能为“网络钓鱼防护”

从liferay:https://github.com/liferay/liferay-portal/blob/d9883da1a7df9de7b72d9aa8984e20693ab8112d/portal-impl/src/com/liferay/portal/security/auth/session/AuthenticatedSessionManagerImpl.java

public HttpSession renewSession(
        HttpServletRequest request, HttpSession session)
    throws Exception {

    // Invalidate the previous session to prevent session fixation attacks

    String[] protectedAttributeNames =
        PropsValues.SESSION_PHISHING_PROTECTED_ATTRIBUTES;

    Map<String, Object> protectedAttributes = new HashMap<>();

    for (String protectedAttributeName : protectedAttributeNames) {
        Object protectedAttributeValue = session.getAttribute(
            protectedAttributeName);

        if (protectedAttributeValue == null) {
            continue;
        }

        protectedAttributes.put(
            protectedAttributeName, protectedAttributeValue);
    }

    session.invalidate();

    session = request.getSession(true);

    for (String protectedAttributeName : protectedAttributeNames) {
        Object protectedAttributeValue = protectedAttributes.get(
            protectedAttributeName);

        if (protectedAttributeValue == null) {
            continue;
        }

        session.setAttribute(
            protectedAttributeName, protectedAttributeValue);
    }

    return session;
}
  • 此处的“受保护”属性用于将相关属性复制到新会话中,否则它们将丢失。