我有一些關於Spring Security 3.0.5和SecurityContext的問題。首先,生病試圖得出什麼結論,我知道:Spring Security:多個ThreadLocals中的SecurityContext實例相同,這是如何工作的?
- SecurityContextHolder中存儲的SecurityContext
- 請求之間,SecurityContext的存儲在HttpSession中
- 開始請求:SecurityContextHolder中獲取的SecurityContext從HttpSession中
結束請求:SecurityContextHolder將SecurityContext置於HttpSession中
在請求期間,在服務器上,SecurityContextHolder使用ThreadLocal。無處不在的應用程序(相同的請求),SecurityContext的可訪問
現在我的問題....
- >兩個請求:SecurityContext的實例將共享
如何這是否工作?我的意思是,SecurityContextHolder爲每個請求使用一個ThreadLocal。 2請求= 2 ThreadLocals
每個請求都會:HttpSession的getSessionAttribute(SecurityContext) 如果他們在SecurityContext上工作,會發生什麼? SecurityContext是否在所有ThreadLocals中更改?
據我所知:是(??)
這是如何工作的?他們如何在同一個實例上工作?我的意思是,我真的無法想象具有兩個不同ThreadLocals的兩個不同線程可以在同一個實例上工作嗎?
API(ThreadLocal): 該類提供線程局部變量。這些變量不同於它們的正常副本,因爲訪問一個線程的每個線程(通過它的get或set方法)都有其自己的,獨立初始化的變量副本。
我的意思是說:複製!也許我錯了,並且兩個線程不可能在同一個SecurityContext上工作?但是Spring Security Documentation這樣說!
如果有人能夠向我解釋這一點,會很棒:-)謝謝!
但是爲什麼ThreadLocal API會說這些變量只是複製?我的意思是,如果他們是複製品,他們不能成爲「相同」,對吧? – nano7 2011-06-16 18:05:16
@ nano7:Java中的對象由引用標識。因此,引用可以被複制,但它們仍然指向同一個對象。 – axtavt 2011-06-16 18:37:38
啊。所以我誤解了它,因爲......我不是一個專家....但我仍然認爲ThreadLocal API可以更精確。謝謝! – nano7 2011-06-17 10:25:40