1

我们使用的是 Tomcat 9.0.7,我们需要在验证用户身份后更改 Jsession-ID。

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

4

1 回答 1

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;
}
  • 此处的“受保护”属性用作将相关属性复制到新会话中的一种方式,否则它们将丢失。
于 2018-07-12T23:11:09.527 回答