将初始化参数传入EJB

3
我需要在EJB中使用身份验证凭据来访问外部的Web服务。
我发现this thread,但是据我了解,ejb-jar.xml位于最终的jar内,这意味着重新打包以更改密码,我想避免这种情况。
我知道我可以使用<servlet> ... <init-param>...来引用应用程序服务器配置目录中的文件,其中我可以存储用户名和密码。是否有类似于EJB的方法?
我的下一个想法是在payara服务器内声明自定义JNDI资源,但我不确定安全性方面的影响。
推荐的方法是如何将用户名和密码传输到EJB中?

1
我一直使用env-entry - 它非常适合我的需求,例如当我部署代码时,如果是生产、UAT或实验室,我将其中一个设置为true,其他则为false - 基于环境,然后代码使用其他env-entry来加载适当的WSDL URL、用户名和密码。此外,如果您将ear/war部署为“exploded”,那么(在Jboss上)您只需根据需要编辑ejb-jar.xml文件,因为应用服务器会将其部署为未压缩文件。你正在使用哪个应用服务器? - JGlass
我正在使用Payara 4.1.x,我将检查这个“exploded”选项,如果在Payara中有效,那么这将是答案。到目前为止谢谢。 - Thomas P
看起来他们支持它。如果可行请告诉我,我会将其添加为官方答案!请注意,这是命令行版本,但我相信还有其他方法!对于 Jboss,在 Web Admin UI 中只需选中复选框即可。很有意思,我从未听说过 Payara,它源自 GlassFish。谢谢! - JGlass
相关链接:https://stackoverflow.com/a/12463807/870122 - perissf
@JGlass,“爆炸式”部署似乎是默认的,而ejb-jar.xml可以在部署路径的META-INF目录中访问,因此这种方式将运行良好。谢谢。 - Thomas P
酷托马斯 - 很高兴它起作用了 - 如果我有所帮助,请随意将其标记为有用的。我可以提供一个答案,但你已经链接到了基础知识!看起来@him也给了你一个选项 - 我只是不需要那么花哨;-) - JGlass
1个回答

3

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

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

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

HTH


1
谢谢,我知道“JNDI => @Resource”的方法,但我的担忧是,域内的每个应用程序都可以使用@Resource并以这种方式访问用户名+密码(据我所知)。在我看来,ejb-jar.xml仅为单个ejb模块提供凭据,并且更接近“最小特权原则”。 - Thomas P
如果您可以理解,但仍然面临“过于接近”的配置问题。 EE 平台的设计原则是从代码中删除“配置”(除了默认配置按约定和注释设置,并将其放置在部署上下文中)。像所有事物一样,解决这个问题有许多方法。 - him

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接