Jetty是否支持SessionTrackingMode.SSL

时间:2014-10-01 18:47:53

标签: servlets ssl jetty

SessionTrackingMode允许您指定Servlet会话绑定到SSL会话。 Tomcat支持此Tomcat SSL HOW-TO。是否有任何机制可以在Jetty中实现这一目标?

例如,如果我在Servlet init中执行以下操作;

@WebServlet(urlPatterns ={ "/session_test" })

公共类SessionTestServlet扩展了HttpServlet {

private static final SessionTrackingMode[] modeArray = { SessionTrackingMode.SSL };
private static final Set<SessionTrackingMode> SESSION_TRACKING_MODES = new HashSet<>(Arrays.asList(modeArray));

@Override
public void init(ServletConfig config) throws ServletException {
    super.init(config);
    config.getServletContext().setSessionTrackingModes(SESSION_TRACKING_MODES);
}

然后没有创建会话。

1 个答案:

答案 0 :(得分:2)

Jetty似乎不支持SessionTrackingMode.SSL

刚刚打开它的错误(因为你是第一个有人问过servlet规范这个功能的人)

https://github.com/eclipse/jetty.project/issues/161

很想知道将来如何工作,使用HTTP / 2,您不会在每个后续请求中建立新的SSL连接,它们只能在同一个ALPN层中进行隧道传输。< / p>

更新:2014年10月2日

要解决会话ID劫持问题,有一项功能implemented in Jetty 9将在身份验证后更改会话ID。 Bug-392247

这可以很好地防止恶意第三方劫持经过身份验证的会话。 (刚开始使用您登录的SSL)

现在,在Jetty 9(也就是Servlet 3.1)之前的Jetty版本中,我们将创建一个新的会话对象并复制旧的会话数据。这意味着我们还会触发此更改的已注册会话侦听器。

Jetty 9已不再适用,因为新的Servlet 3.1引入了一种新方法HttpServletRequest.changeSessionId(),用户也可以调用它来强制更改sessionId,还有HttpServletRequest.login()用户可以调用以编程方式登录。这还伴随着要求如果会话在这两个调用之前存在(会话对象在==之后的会话对象之后),那么就没有被触发的侦听器。这意味着我们只需更改sessionId而不是对象。

这对于会话ID劫持意味着什么,没有什么,但知道这些方法存在以及使用它们代表什么是有用的。 :)