我們使用JSF & EJB 3.0(EclipseLink 2.0)。我們需要爲我們的無狀態會話bean中的每個連接使用Oracle代理授權。爲此,我們需要獲取數據庫用戶名以通過代理連接。數據庫用戶名是通過規則從JSF認證用戶名構建的。如何從無狀態會話bean中獲取JSF應用程序用戶名
這裏是話題http://blogs.oracle.com/olaf/2010/04/using_oracle_proxy_authenticat.html
的文章,因此,在經過身份驗證的用戶呼叫JSF管理bean的方法,它的依次調用一些會話bean的方法自己的用戶名必須以某種方式傳遞給會話bean。
現在我有兩個不是很好的解決方案: - 在每個會話bean方法中傳遞用戶名作爲參數(不是非常整潔,但將工作); - 上述文章的解決方案:使用會話bean的類成員變量來存儲用戶名(不是線程安全的和潛在危險的)
P.S.我發現使用線程局部變量的解決方案:_http://www.adam-bien.com/roller/abien/entry/how_to_pass_context_with 它工作正常,但仍然存在問題。我需要在每次調用ejb會話bean之前在每個jsf會話託管bean中放入當前用戶名,因爲它必須位於同一個線程中。
非常感謝Jörn。你的解決方案對我來說很整潔。 P.S.你能告訴我什麼時候SessionContext不會包含當前web層的用戶名嗎? – Andrey 2010-08-04 10:39:32