【发布时间】:2016-09-16 13:52:44
【问题描述】:
我最近为 Weblogic 实例上的数据源的 JNDI 查找添加了安全限制 - 一个角色封装了一些组和一个系统用户,供应用程序中的后台进程使用。
服务器正常启动,但一段时间后(上次重启后大约 2 天)它开始抛出此错误并且数据源变得无法访问:
init 方法调用失败;嵌套异常是 javax.naming.NoPermissionException: User
<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 实例上抱怨虚拟用户(匿名)而在其他实例上抱怨管理员?我怎样才能减轻这种情况?
【问题讨论】:
-
验证域/安全/常规是否“启用匿名管理员查找”
-
不是。我已经进行了更改,直到现在问题还没有出现。
-
是否已经过了通常的错误重现期?
-
还没有。很难跟踪,因为它发生的不可预测 - 它发生在最后一次重启后 3 天(最早)和最后一次服务器重启后 7 天(最晚)。仍然对其进行监视 2-3 天,如果不再发生,那一定是正确的解决方法。
-
我明白了,有道理。
标签: java weblogic datasource jndi weblogic12c