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);
}
然后没有创建会话。
答案 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劫持意味着什么,没有什么,但知道这些方法存在以及使用它们代表什么是有用的。 :)