问题描述 两个 WebLogic Server 域之间的双向通信产生了安全异常。
备注: 在本文中可以找到异常示例。 |
快速链接
为什么需要在 WLS 域之间建立信任? 在两个 WebLogic Server 域之间双向通信期间,调用方标识(或内核标识)从一个域传播到另一个域。由于在调用域已经验证了主体,因此在第二个域(服务器)中就没有必要再次验证该主体身份。要建立这种关系,必须在两个域之间建立信任。EJB、从一个服务器向另一个服务器的 JMS 调用、servlet run-as 使用或者从一个服务器到另一个服务器的 EJB身份主体的 run-as 的使用,这些都是需要在域之间建立信任的例子。这是对两个域之间的互操作性的要求。如果两个域之间没有事务上下文传播要求,那么就没有必要在域之间建立信任。
返回页首
如何在 WLS 7.0 和 8.1 域之间建立信任? 按如下所述使用 WebLogic Server 管理控制台设置域信任。根据所使用的 WLS 版本,为两个互相通信的域更改域 Credential。请参考:
在更改域 Credential 后,重新启动管理服务器,然后启动所有托管服务器。
|
故障排除
如果还没有在列出的域之间建立信任,则可能会出现以下问题。
问题 - 在 6.x 和 8.1 域之间
6.x 服务器
<Mar 31, 2004 3:02:04 PM EST> <Warning> <Dispatcher> <RuntimeException thrown by rmi server: 'weblogic.rmi.cluster.ReplicaAwareServerRef@9 - jvmid: '-3417175156 082478004S:10.40.4.32:[8001,8001,8002,8002,8001,8002,-1]:mydomain:myserver', oid : '9', implementation: 'weblogic.jndi.internal.RootNamingNode@98540'' java.lang.SecurityException: Authentication for user system denied in realm wl_realm at weblogic.security.acl.Realm.authenticate(Realm.java:212) at weblogic.security.acl.Realm.getAuthenticatedName(Realm.java:233) at weblogic.security.acl.internal.Security.authenticate(Security.java:171) at weblogic.security.acl.internal.Security.verify(Security.java:95) at weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.java:292) at weblogic.rmi.internal.BasicExecuteRequest.execute(BasicExecuteRequest.java:22) at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:140) at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:121) |
8.1 服务器
java.lang.SecurityException: Authentication for user system denied in realm wl_realm
Start server side stack trace: java.lang.SecurityException: Authentication for user system denied in realm wl_realm at weblogic.security.acl.Realm.authenticate(Realm.java:212) at weblogic.security.acl.Realm.getAuthenticatedName(Realm.java:233) at weblogic.security.acl.internal.Security.authenticate(Security.java:171) at weblogic.security.acl.internal.Security.verify(Security.java:95) at weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.java:292) at weblogic.rmi.internal.BasicExecuteRequest.execute(BasicExecuteRequest.java:22) at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:140) at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:121) End server side stack trace
at weblogic.rjvm.BasicOutboundRequest.sendReceive(BasicOutboundRequest.java:108) at weblogic.rmi.cluster.ReplicaAwareRemoteRef.invoke(ReplicaAwareRemoteRef.java:284) at weblogic.rmi.cluster.ReplicaAwareRemoteRef.invoke(ReplicaAwareRemoteRef.java:244) at weblogic.jndi.internal.ServerNamingNode_811_WLStub.lookup(Unknown Source) at weblogic.jndi.internal.WLContextImpl.lookup(WLContextImpl.java:338) at weblogic.jndi.internal.WLContextImpl.lookup(WLContextImpl.java:333) at weblogic.management.ManagedServerLocator.discoverManagedServer(ManagedServerLocator.java:219) at weblogic.management.ManagedServerLocator.discoverAllKnownServers(ManagedServerLocator.java:130) at weblogic.management.AdminServerAdmin.discoverManagedServers(AdminServerAdmin.java:527) at weblogic.management.AdminServerAdmin.finishPostListen(AdminServerAdmin.java:473) at weblogic.t3.srvr.T3Srvr.resume(T3Srvr.java:1041) at weblogic.t3.srvr.T3Srvr.run(T3Srvr.java:359) at weblogic.Server.main(Server.java:32) |
解决办法
确保 8.1 服务器的域 Credential 与 6.1 服务器中的系统用户密码相同。
问题 - 在 8.1 域之间
客户端(执行查找的服务器)
java.lang.SecurityException: [Security:090398]Invalid Subject: principals=[weblogic, Administrators] at weblogic.rjvm.BasicOutboundRequest.sendReceive(BasicOutboundRequest.java:108) at weblogic.rmi.cluster.ReplicaAwareRemoteRef.invoke(ReplicaAwareRemoteRef.java:284) at weblogic.rmi.cluster.ReplicaAwareRemoteRef.invoke(ReplicaAwareRemoteRef.java:244) at weblogic.jndi.internal.ServerNamingNode_812_WLStub.lookup(Unknown Source) at weblogic.jndi.internal.WLContextImpl.lookup(WLContextImpl.java:343) at weblogic.jndi.internal.WLContextImpl.lookup(WLContextImpl.java:336) at javax.naming.InitialContext.lookup(InitialContext.java:347) at bea.SourceServlet.m1(SourceServlet.java:50) at bea.SourceServlet.doGet(SourceServlet.java:26) at javax.servlet.http.HttpServlet.service(HttpServlet.java:740) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:971) at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:317) at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:118) at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:400) at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:305) at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:6350) at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:317) at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:118) at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3635) at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2585) at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197) at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170) |
服务器端
<Warning> <RMI> <BEA-080003> <RuntimeException thrown by rmi server: weblogic.jndi.internal.AdminRoleBasedDispatchServerRef@9 - hostID: '3994477043249316298S:10.40.4.32:[6151,6151,-1,-1,6151,-1,-1,0,0]:491171:myserver', oid: '9', implementation: 'weblogic.jndi.internal.RootNamingNode@d22462' java.lang.SecurityException: [Security:090398]Invalid Subject: principals=[weblogic, Administrators]. java.lang.SecurityException: [Security:090398]Invalid Subject: principals=[weblogic, Administrators] at weblogic.security.service.SecurityServiceManager.seal(SecurityServiceManager.java:682) at weblogic.rjvm.MsgAbbrevInputStream.getSubject(MsgAbbrevInputStream.java:182) at weblogic.rmi.internal.BasicServerRef.acceptRequest(BasicServerRef.java:825) at weblogic.rmi.internal.BasicServerRef.dispatch(BasicServerRef.java:300) at weblogic.rjvm.RJVMImpl.dispatchRequest(RJVMImpl.java:923) at weblogic.rjvm.RJVMImpl.dispatch(RJVMImpl.java:844) at weblogic.rjvm.ConnectionManagerServer.handleRJVM(ConnectionManagerServer.java:222) at weblogic.rjvm.ConnectionManager.dispatch(ConnectionManager.java:794) at weblogic.rjvm.t3.T3JVMConnection.dispatch(T3JVMConnection.java:570) at weblogic.socket.NTSocketMuxer.processSockets(NTSocketMuxer.java:105) at weblogic.socket.SocketReaderRequest.execute(SocketReaderRequest.java:32) at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197) at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170) |
解决办法
确保两个 8.1 域的域 Credential 相同。
问题 - 在查找托管服务器过程中出错
管理服务器
Mar 31, 2004 4:41:56 PM EST> <Error> <Management> <BEA-141135> <The managed server discovery service could not be started on the admin server.weblogic.management.NoAccessRuntimeException: Access not allowed for subject: principals=[], on ResourceType: ServerRuntime Action: execute, Target: reconnectToAdminServer at weblogic.rjvm.BasicOutboundRequest.sendReceive(BasicOutboundRequest.java:108) at weblogic.rmi.internal.BasicRemoteRef.invoke(BasicRemoteRef.java:138) at weblogic.management.internal.RemoteMBeanServerImpl_812_WLStub.invoke(Unknown Source) at weblogic.management.internal.MBeanProxy.invoke(MBeanProxy.java:946) at weblogic.management.internal.MBeanProxy.invokeForCachingStub(MBeanProxy.java:481) at weblogic.management.runtime.ServerRuntimeMBean_Stub.reconnectToAdminServer(ServerRuntimeMBean_Stub.java:1359) at weblogic.management.ManagedServerLocator.discoverManagedServer(ManagedServerLocator.java:260) at weblogic.management.ManagedServerLocator.discoverAllKnownServers(ManagedServerLocator.java:130) at weblogic.management.AdminServerAdmin.discoverManagedServers(AdminServerAdmin.java:527) at weblogic.management.AdminServerAdmin.finishPostListen(AdminServerAdmin.java:473) at weblogic.t3.srvr.T3Srvr.resume(T3Srvr.java:1041) at weblogic.t3.srvr.T3Srvr.run(T3Srvr.java:359) at weblogic.Server.main(Server.java:32) Caused by: weblogic.management.NoAccessRuntimeException: Access not allowed for subject: principals=[], on ResourceType: ServerRuntime Action: execute, Target: reconnectToAdminServer |
托管服务器
<Mar 31, 2004 4:41:56 PM EST> <Error> <Security> <BEA-090513> <ServerIdentity failed validation, downgrading to anonymous.> <Mar 31, 2004 4:41:56 PM EST> <Warning> <RMI> <BEA-080003> <RuntimeException thrown by rmi server: weblogic.management.internal.RemoteMBeanServerImpl.invoke(Ljavax.management.ObjectName;Ljava.lang.String; [Ljava.lang.Object;[Ljava.lang.String;) weblogic.management.NoAccessRuntimeException: Access not allowed for subject: principals=[], on ResourceType: ServerRuntime Action: execute, Target: reconnectToAdminServer. weblogic.management.NoAccessRuntimeException: Access not allowed for subject: pr incipals=[], on ResourceType: ServerRuntime Action: execute, Target: reconnectToAdminServer at weblogic.management.internal.SecurityHelper$IsAccessAllowedPrivilegeAction.wlsRun(SecurityHelper.java:564) at weblogic.management.internal.SecurityHelper$IsAccessAllowedPrivilegeAction.run(SecurityHelper.java:456) at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:317) at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:118) at weblogic.management.internal.SecurityHelper.isAccessAllowed(SecurityHelper.java:350) at weblogic.management.internal.RemoteMBeanServerImpl.private_invoke(RemoteMBeanServerImpl.java:946) at weblogic.management.internal.RemoteMBeanServerImpl.invoke(RemoteMBeanServerImpl.java:908) at weblogic.management.internal.RemoteMBeanServerImpl_WLSkel.invoke(Unknown Source) at weblogic.rmi.internal.BasicServerRef.invoke(BasicServerRef.java:477) at weblogic.rmi.internal.BasicServerRef$1.run(BasicServerRef.java:420) at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:353) at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:144) at weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.java:415) at weblogic.rmi.internal.BasicExecuteRequest.execute(BasicExecuteRequest.java:30) at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197) at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170) |
解决办法
如果使用管理控制台更改域 Credential,然后没有关闭托管服务器就重新启动管理服务器,则将会发生此问题。因为托管服务器没有重新启动,它还在内存中保留已缓存的旧域 Credential,所以该 Credential 与管理服务器的域 Credential(新 Credential)不匹配。
在更改域 Credential 时,按顺序依次关闭托管服务器和管理服务器。在关闭托管服务器后,先启动管理服务器然后启动托管服务器。
|
返回页首
反馈 请给我们提供您的意见,说明此支持诊断模式“探查域信任问题”一文是否有所帮助,您需要的任何解释,以及对支持诊断模式的新主题的任何要求。
|
免责声明: 依据 BEA 与您签署的维护和支持协议条款,BEA Systems, Inc. 在本网站上提供技术技巧和修补程序供您使用。虽然您可以将这些信息和代码与您获得 BEA 授权的软件一起使用,但 BEA 并不对所提供的技术技巧和修补程序做任何形式的担保,无论是明确的还是隐含的。 本文档中引用的任何商标是其各自所有者的财产。有关完整的商标信息,请参考您的产品手册。 | 返回页首 |