2014-10-01 53 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