问题描述
两个
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 并不对所提供的技术技巧和修补程序做任何形式的担保,无论是明确的还是隐含的。
本文档中引用的任何商标是其各自所有者的财产。有关完整的商标信息,请参考您的产品手册。
|
返回页首 |