2014-10-01 54 views
2

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

例如,如果我在我的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); 
} 

则不创建会话。

回答

2

在Jetty中似乎不支持SessionTrackingMode.SSL

刚开业的bug吧(你是正式的第一个人问过关于Servlet规范的此功能)

https://bugs.eclipse.org/bugs/show_bug.cgi?id=445713

会好奇地想知道这将如何在未来的工作,在HTTP/2中,每个后续请求都没有新的SSL连接,它们只会在同一个ALPN层中隧道传输。

更新时间:2014年10月2

为了解决会话ID劫持,还有一个特点implemented in Jetty 9验证后,将改变会话ID。 Bug-392247

这在防止恶意第三方劫持认证会话方面做得很好。 (刚开始使用SSL登录前转)

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

这是没有用码头9不再成立,因为新的Servlet 3.1中引入的新方法HttpServletRequest.changeSessionId(),其用户也可以致电给力改变的SessionID,也HttpServletRequest.login(),其中用户可以调用以编程方式登录。这也伴随着一个要求,如果一个会话在这两个调用之前存在(会话对象之前==会话对象之后),那么没有侦听器被触发。这意味着我们只需更改sessionId而不是对象。

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

+1

谢谢,我只是探索机制,以防止会话Id劫持。我也在测试存储服务器端会话的javax.servlet.request.ssl_session_id,并检查它是否如预期的那样。是的,SSL会话与App会话范围是一个棘手的问题。 – JFK 2014-10-02 10:04:36