Jakarta ee 初始化参数到EJB中

Jakarta ee 初始化参数到EJB中,jakarta-ee,ejb,Jakarta Ee,Ejb,我必须在EJB中使用身份验证凭据来访问外部Web服务 我发现,但据我所知,ejb-jar.xml驻留在最终的jar中,这意味着重新打包以更改密码,我希望避免这种情况 我知道,我可以使用引用应用程序服务器配置目录中的文件,我可以在其中存储用户名和密码。EJB有类似的方法吗 我的下一个想法是在payara服务器中声明一个自定义JNDI资源,但我不确定其安全含义 建议使用什么方法将用户名和密码传输到EJB中 这就是JNDI的作用。凭证、URL和资源路径等内容应该由应用程序部署人员(企业部署模型中假定的

我必须在EJB中使用身份验证凭据来访问外部Web服务

我发现,但据我所知,ejb-jar.xml驻留在最终的jar中,这意味着重新打包以更改密码,我希望避免这种情况

我知道,我可以使用
引用应用程序服务器配置目录中的文件,我可以在其中存储用户名和密码。EJB有类似的方法吗

我的下一个想法是在payara服务器中声明一个自定义JNDI资源,但我不确定其安全含义


建议使用什么方法将用户名和密码传输到EJB中

这就是JNDI的作用。凭证、URL和资源路径等内容应该由应用程序部署人员(企业部署模型中假定的角色之一)设置,以便应用程序作者不必担心细节

每个容器都有不同的机制将值注入内部JNDI树。Glassfish允许您直接在管理控制台中执行此操作。与WebSphere类似。其他容器将具有类似的机械装置。然后,您可以使用@Resource通过JNDI引用该值(如果您希望注入该值),或者使用以下命令通过直接查找引用该值:

Context _ctx = new InitiaContext();
String _user = (String) _ctx.lookup( "jndi/tree/path/to/desired/resource" );

HTH

我一直在使用env条目-它非常适合我的需要,例如,当我部署代码时,如果它的prod、uat或lab我将其中一个设置为true,其他设置为false-根据环境,然后代码使用其他env条目加载适当的WSDL URL、用户名和密码。此外,如果您将ear/war部署为“分解”,那么(在Jboss上也是如此),您可以根据需要编辑ejb-jar.xml文件,因为应用服务器将其部署为解压文件。您使用的是什么应用服务器?我使用的是payara 4.1.x,我将选中此“分解”选项,如果它在payara中有效,那么这将是答案。到目前为止谢谢。看来他们确实支持。如果它有效,让我知道,我会添加它作为正式答案!注意,这是命令行版本,但我相信还有其他方法!Jboss,它只是Web管理UI中的一个复选框。有趣的是,我从来没有听说过帕亚拉,它来自玻璃鱼。谢谢相关:@JGlass“exploded”部署似乎是默认的,并且ejb-jar.xml可以在部署路径的META-INF目录中访问,因此这种方式将很好地工作。谢谢。谢谢,我知道“JNDI=>@Resource”的方式,但我担心的是,域内的每个应用程序都可以通过这种方式使用@Resource并访问用户名+密码(据我所知)。在我看来,ejb-jar.xml只为一个ejb模块提供凭证,并且有点接近“最小特权原则”。这是可以理解的,但是您将面临“过于接近”配置的问题。ee平台的设计原则是从代码中删除“配置”(根据约定和注释的默认配置除外),并将其放在部署上下文中。正如所有事情一样,有很多方法可以解决这个问题。