2012-01-23 58 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