我正在使用spring来获取jms的连接工厂
<!-- looking through jndi -->
<bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate">
<property name="environment">
<props>
<prop key="java.naming.factory.initial">weblogic.jndi.WLInitialContextFactory</prop>
<prop key="java.naming.provider.url">t3://xxx.xxx.xx.x:8002</prop>
<prop key="java.naming.security.principal">test</prop>
<prop key="java.naming.security.credentials">test</prop>
</props>
</property>
</bean>
<!-- JMS Topic Connection Factory -->
<bean id="jmsConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiTemplate" ref="jndiTemplate" />
<property name="jndiName" value="jms/AMP/AMPConnectionFactory" />
<property name="lookupOnStartup" value="true" />
<property name="cache" value="false" />
<property name="proxyInterface" value="javax.jms.ConnectionFactory" />
</bean>
应用程序本身在 weblogic 的一个实例上运行,而 jndi 查找在外部 weblogic 服务器上执行。问题是,当我尝试在上述“jmsConnectionFactory”的帮助下创建连接时,我收到错误:
Caused by: java.lang.SecurityException: [Security:090398]Invalid Subject: principals=[weblogic, Administrators]
似乎我的“jmsConnectionFactory”没有使用适当的凭据来打开连接。在我以编程方式通过 jndi 获得“jmsConnectionFactory”的同时,没有弹簧容器,一切正常。有什么线索为什么spring的连接工厂使用另一个凭据来获取连接?