2015-09-30 72 views
0

我使用Spring框架和這裏的一段代碼,我使用retirieve的HttpSession對象:從子線程獲取http會話?

ServletRequestAttributes attr; 
try { 
    attr = (ServletRequestAttributes) RequestContextHolder 
      .currentRequestAttributes(); 
} catch (Exception e) { } 
HttpSession session = attr.getRequest().getSession(false); 

的事情是RequestContextHolder

Holder類以暴露web請求形式爲線程綁定 RequestAttributes對象。

因此,它不會在容器創建的用於處理請求的線程之外看到。有沒有辦法在一些子線程中檢索會話?

+2

不會,因爲這將是一個相當的安全漏洞... –

+0

@ M.Deinum所以,任何會話是一個線程綁定的對象。但是在'servlet API'文檔或其他地方的某處指定了嗎?我從來沒有想過從多個線程訪問會話... –

+0

也不應該你想要的。想象一下,你的會話中有一個購物車,任何人都可以修改會話並將其添加到購物車中......如果發生這種情況,我想你會不高興......想象一下,您的安全憑證存儲在會話中(春季安全),任何人都可以訪問它(一個設計錯誤的框架可以把你的密碼)... –

回答

1

不,沒有。在Servlet API中,會話是請求對象的屬性。因此,如果您沒有請求,您會檢索現有會話中的哪一個?

+0

請求對象是線程綁定的? –

+0

是的,因爲每個請求都由一個線程提供服務。 – Andres

+0

非常感謝!順便說一句,如果你知道它在哪裏,你能不能引用規範中的相關部分......? –