2012-01-23 82 views
1

在EJB,進行安全認證與授權,我發現使用JNDI如下的一種常用方法,EJB 3.1安全授權而使用CDI

properties.put(Context.SECURITY_PRINCIPAL, "username"); 
properties.put(Context.SECURITY_CREDENTIALS, "password"); 
Context ctx = new InitialContext(properties); 
Object ref = jndiContext.lookup("SecureBean/remote"); 
SecureRemoteBusiness remote = (SecureRemoteBusiness)ref; 

問:我想知道是否有任何方法來實現這一同時使用DI可能不使用任何外部CDI框架。如果唯一的選擇是使用外部CDI框架,請爲我提供一個示例或參考。

+0

您使用的是什麼應用程序服務器?如果你想要一些與你的例子不同的東西,恐怕你必須去遠程EJB認證的服務器特定API。 –

+0

感謝您的回覆。我正在使用Glassfish。那麼,通過JNDI進行身份驗證是否是可用的最佳機制? – Bala

回答

1

沒有任何Java EE規範真正解決了完整的身份驗證和授權漏洞,這就是Spring Security,Apache Shiro,JBoss Picketlink等存在的原因。

至於你的問題,不,沒有任何方法可以在沒有使用外部框架的情況下通過DI實現。正如Gonzalo Garcia Lasurtegui所說,任何你會發現的東西都是服務器專有的。

+0

還有一件事我學到了。當通過「j_security_check」通過web.xml中的適當配置使用AS的安全認證功能時,默認情況下,您的Web層會話詳細信息將在查找或調用期間維護並傳播到應用層。因此,您不必擔心在JNDI查找中傳遞安全證書。最好的情況是CDI也可以在沒有任何限制的情況下使用,而所有的安全憑證都可以無縫傳遞:-) – Bala