我最近在Weblogic实例上对数据源的JNDI查找添加了安全限制 - 一个封装了一些组的角色和一个系统用户,供应用程序中的后台进程使用。
服务器正常启动,但经过一段时间(上次重启后大约2天),它开始抛出此错误,数据源无法访问:
调用init方法失败;嵌套异常是 javax.naming.NoPermissionException:用户
<anonymous>
没有jndi.dataSource的权限来执行查找操作。
就此而言,我还在数据源本身上添加了安全限制,并在应用程序使用的安全领域中创建了用户,并进行了一些应用程序端更改:
在weblogic descriptor file
中,我添加了以下行,以便默认情况下使用上述系统用户运行应用程序:
<wls:run-as-role-assignment>
<wls:role-name>systemUser</wls:role-name>
<wls:run-as-principal-name>systemUser</wls:run-as-principal-name>
</wls:run-as-role-assignment>
将此security-role
添加到web.xml:
<security-role>
<role-name>systemUser</role-name>
</security-role>
并在servlet
定义中指定了这一点,也在web.xml中指定了
<run-as>
<role-name>systemUser</role-name>
</run-as>
使用配置系统用户的jndiTemplate访问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.security.principal">systemUser</prop>
<prop key="java.naming.security.credentials">systemUserPassword</prop>
</props>
</property>
</bean>
Weblogic版本: 12.1.3.0.7
Java版: jdk1.8.0_91_unlimited
之前有没有人遇到过这种行为?为什么在某些Weblogic实例上抱怨虚拟用户(匿名)而在其他人上抱怨管理员?我怎么能缓解这个?
答案 0 :(得分:0)
<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.security.principal">systemUser</prop>
<prop key="java.naming.security.credentials">systemUserPassword</prop>
</props>
</property>
</bean>
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiTemplate" ref="jndiTemplate"></property>
<property name="jndiName" value="myJndiName"></property>
<property name="exposeAccessContext" value="true"></property>
</bean>