在Glassfish v2中,我通过在ORB节点下的管理控制台中启用“IIOP客户端身份验证”复选框来保护我的JNDI查找。
在我的独立客户端中,我执行“ProgrammaticLogin”,然后允许我进行JNDI查找。
但是在Glassfish v3中,如果想在同一设置中进行任何JNDI查找,我会收到此错误:
18.08.2010 14:31:10 com.sun.enterprise.transaction.JavaEETransactionManagerSimplified
initDelegates INFO: Using
com.sun.enterprise.transaction.jts.JavaEETransactionManagerJTSDelegate
as the delegate
org.omg.CORBA.NO_PERMISSION:
----------BEGIN server-side stack trace----------
org.omg.CORBA.NO_PERMISSION:
vmcid: 0x0
minor code: 0
completed: No
我很确定“ProgrammaticLogin”一般都可以工作,因为它允许我在我的安全EJB上进行远程方法调用(使用@RolesAllowed
但是如果IIOP客户端身份验证已关闭)。
我登录的用户是我为“文件”域创建的简单用户。
任何想法,为什么ProgrammticLogin无法在Glassfish v3中用于授权JNDI查找?
或者从独立客户端使用ORB进行身份验证的正确方法是什么?为了这个目的?
答案 0 :(得分:1)
您确定appserv-rt.jar在您的类路径上吗?它是每个glassfish3安装的一部分,例如在我的安装它位于:
/opt/glassfish3/glassfish/lib
这非常重要。它包含一些客户端java类,尤其是:AppclientIIOPInterceptorFactory。
这些将SecClientRequestInterceptor添加到ORB,它关心用户名和密码被添加到发送到服务器的GIOP请求中。
我花了大约两天的时间扫描玻璃鱼的源代码并用wirehark嗅探电线上的corba包,直到我发现它为止。
可以在此处找到如何保护bean并编写真正的Java EE客户端的示例: http://download.oracle.com/docs/cd/E19798-01/821-1841/bnbzk/index.html
希望这会有所帮助 曼努埃尔