2014-12-13 59 views
5

我寫使用Spring和JMS的新應用程序。 Myintent將使用Spring的異步接收 - 消息驅動的POJO。我收到以下錯誤。安全:090398無效的主題 - 春天和weblogic

org.springframework.jms.listener.DefaultMessageListenerContainer.refreshConnectionUntilSuccessful[904] - 
Could not refresh JMS Connection for destination  
'xyz_Module!xyz_Queue' - retrying in 5000 ms. Cause: 
[Security:090398]Invalid Subject: principals=[user, groupa, groupb] 
java.lang.SecurityException: [Security:090398]Invalid Subject: principals=[user, groupa, groupb] 

我有以下的春天定義

<bean id="jmsContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer"> 
    <property name="connectionFactory" ref="connectionFactory" /> 
    <property name="destination" ref="destination" /> 
    <property name="messageListener" ref="messageAdapter" /> 
</bean> 
<bean id="connectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean"> 
    <property name="jndiName" value="jms/xxxxx" /> 
    <property name="resourceRef" value="true"></property> 
</bean> 
<bean id="destination" class="org.springframework.jndi.JndiObjectFactoryBean"> 
    <property name="jndiName" value="jms/yyyyy" /> 
</bean> 
<bean id="messageAdapter" class="org.springframework.jms.listener.adapter.MessageListenerAdapter"> 
    <property name="delegate" ref="messageReceiverDelegate" /> 
    <property name="defaultListenerMethod" value="receive" /> 
</bean> 

我,我們必須啓用跨域安全幾個職位讀取。我不認爲我們需要啓用跨域安全,因爲在我的公司,是多邊開發銀行的幾個其他應用程序被從遠程隊列中讀取的工作就好了。這些應用程序在其weblogic服務器中未啓用跨域安全性。

我花了一些時間挖和一些運氣,我發現,如果我重新啓動的WebLogic Server後,我部署了我的申請,我沒有看到安全錯誤了。我能夠在遠程隊列中獲得消息的通知。

雖然我的問題解決了,我很好奇,想知道爲什麼我得到的錯誤,如果我只部署應用程序,而不是重新啓動JVM。

添加更多的日誌信息

12/15/2014 08:58:15,079PM ERROR org.springframework.jms.listener.DefaultMessageListenerContainer.refreshConnectionUntilSuccessful[904] - 
Could not refresh JMS Connection for destination 'XXXXXXXXXXXXXXXXXXXXX' - retrying in 5000 ms. Cause: [Security:090398]Invalid Subject: principals=[weblogic, Administrators, super_users] 
java.lang.SecurityException: **[Security:090398]**Invalid Subject: principals=[weblogic, Administrators, super_users] 
    at weblogic.rjvm.ResponseImpl.unmarshalReturn(ResponseImpl.java:234) 
    at weblogic.rmi.cluster.ClusterableRemoteRef.invoke(ClusterableRemoteRef.java:348) 
    at weblogic.rmi.cluster.ClusterableRemoteRef.invoke(ClusterableRemoteRef.java:259) 
    at weblogic.jms.frontend.FEConnectionFactoryImpl_1034_WLStub.connectionCreateRequest(Unknown Source) 
    at weblogic.jms.client.JMSConnectionFactory.setupJMSConnection(JMSConnectionFactory.java:224) 
    at weblogic.jms.client.JMSConnectionFactory.createConnectionInternal(JMSConnectionFactory.java:285) 
    at weblogic.jms.client.JMSConnectionFactory.createConnection(JMSConnectionFactory.java:191) 
    at org.springframework.jms.support.JmsAccessor.createConnection(JmsAccessor.java:184) 
    at org.springframework.jms.listener.AbstractJmsListeningContainer.createSharedConnection(AbstractJmsListeningContainer.java:405) 
    at org.springframework.jms.listener.AbstractJmsListeningContainer.refreshSharedConnection(AbstractJmsListeningContainer.java:390) 
    at org.springframework.jms.listener.DefaultMessageListenerContainer.refreshConnectionUntilSuccessful(DefaultMessageListenerContainer.java:885) 
    at org.springframework.jms.listener.DefaultMessageListenerContainer.recoverAfterListenerSetupFailure(DefaultMessageListenerContainer.java:861) 
    at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:1012) 
    at java.lang.Thread.run(Thread.java:662) 
Caused by: java.lang.SecurityException: [Security:090398]Invalid Subject: principals=[weblogic, Administrators, super_users] 
    at weblogic.security.service.SecurityServiceManager.seal(SecurityServiceManager.java:833) 
    at weblogic.security.service.SecurityServiceManager.getSealedSubjectFromWire(SecurityServiceManager.java:522) 
    at weblogic.rjvm.MsgAbbrevInputStream.getSubject(MsgAbbrevInputStream.java:349) 
    at weblogic.rmi.internal.BasicServerRef.acceptRequest(BasicServerRef.java:953) 
    at weblogic.rmi.internal.BasicServerRef.dispatch(BasicServerRef.java:351) 
    at weblogic.rmi.cluster.ClusterableServerRef.dispatch(ClusterableServerRef.java:243) 
    at weblogic.rjvm.RJVMImpl.dispatchRequest(RJVMImpl.java:1141) 
    at weblogic.rjvm.RJVMImpl.dispatch(RJVMImpl.java:1023) 
    at weblogic.rjvm.ConnectionManagerServer.handleRJVM(ConnectionManagerServer.java:240) 
    at weblogic.rjvm.ConnectionManager.dispatch(ConnectionManager.java:888) 
    at weblogic.rjvm.MsgAbbrevJVMConnection.dispatch(MsgAbbrevJVMConnection.java:512) 
    at weblogic.rjvm.t3.MuxableSocketT3.dispatch(MuxableSocketT3.java:330) 
    at weblogic.socket.BaseAbstractMuxableSocket.dispatch(BaseAbstractMuxableSocket.java:298) 
    at weblogic.socket.SocketMuxer.readReadySocketOnce(SocketMuxer.java:950) 
    at weblogic.socket.SocketMuxer.readReadySocket(SocketMuxer.java:898) 
    at weblogic.socket.EPollSocketMuxer.dataReceived(EPollSocketMuxer.java:215) 
    at weblogic.socket.EPollSocketMuxer.processSockets(EPollSocketMuxer.java:177) 
    at weblogic.socket.SocketReaderRequest.run(SocketReaderRequest.java:29) 
    at weblogic.socket.SocketReaderRequest.execute(SocketReaderRequest.java:43) 
    at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:145) 
    at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:117) 
12/15/2014 08:58:20,095PM DEBUG org.springframework.jms.listener.DefaultMessageListenerContainer.shutdown[211] - Shutting down JMS listener container 
12/15/2014 08:58:20,095PM DEBUG org.springframework.jms.listener.DefaultMessageListenerContainer.doShutdown[534] - Waiting for shutdown of message listener invokers 
12/15/2014 08:58:20,111PM DEBUG org.springframework.jms.listener.DefaultMessageListenerContainer.shutdown[211] - Shutting down JMS listener container 
12/15/2014 08:58:20,111PM DEBUG org.springframework.jms.listener.DefaultMessageListenerContainer.doShutdown[534] - Waiting for shutdown of message listener invokers 
12/15/2014 08:58:55,595PM DEBUG org.springframework.jms.listener.DefaultMessageListenerContainer.establishSharedConnection[374] - Established shared JMS Connection 
12/15/2014 08:58:55,611PM DEBUG org.springframework.jms.listener.DefaultMessageListenerContainer.resumePausedTasks[541] - Resumed paused task: org.springframework.jms.liste[email protected]189f205 
12/15/2014 08:58:55,642PM DEBUG org.springframework.jms.listener.DefaultMessageListenerContainer.establishSharedConnection[374] - Established shared JMS Connection 
12/15/2014 08:58:55,642PM DEBUG org.springframework.jms.listener.DefaultMessageListenerContainer.resumePausedTasks[541] - Resumed paused task: org.springframework.jms.liste[email protected]18fd51b 
12/15/2014 08:59:52,740PM DEBUG org.springframework.jms.listener.DefaultMessageListenerContainer.doReceiveAndExecute[313] - Received message of type [class weblogic.jms.common.TextMessageImpl] from consumer [[email protected]] of session [[email protected]] 

,如果你看一下日誌,你會看到我重新啓動服務器,並在服務器上來它消耗的消息@ 8點58分55秒

+0

有趣的 - 從你的應用程序或在WebLogic Server的日誌錯誤本身?有沒有更多的堆棧跟蹤? – 2014-12-15 21:39:52

+0

謝謝你看這個。從我的應用程序是錯誤的,因爲春天時試圖刷新其連接 – datta 2014-12-16 17:28:56

+0

我增加了更多的日誌信息是否有幫助時引發的錯誤。 – datta 2014-12-16 17:50:06

回答

4

要麼我們將不得不啓用跨域安全或你將不得不重新啓動JVM

0

您可以驗證爲每個WebLogic服務的對象。 更多信息https://github.com/dmacdonald2013/weblogic-jms-spring

import weblogic.jndi.Environment; 
import weblogic.security.auth.Authenticate; 
import javax.security.auth.Subject; 

for(JmsComponentConfig config : this.config.jmsComponents()){ 
Environment environment = new Environment(); 
environment.setProviderUrl(config.url()); 
environment.setSecurityPrincipal(config.username()); 
environment.setSecurityCredentials(config.password()); 
Subject subject = new Subject(); 
Authenticate.authenticate(environment, subject); 
}