2014-12-13 15 views
5

Ich schreibe eine neue Anwendung mit Feder und JMS. Myintent ist es, den asynchronen Empfang von Spring zu verwenden - Message-Driven POJOs. Ich erhalte den folgenden Fehler.Sicherheit: 090398 Ungültiger Betreff - Spring and 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] 

Ich habe folgende Frühjahr Definition

<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> 

ich in mehrere Beiträge gelesen, dass wir Cross-Domain-Sicherheit aktivieren sind. Ich war nicht davon überzeugt, dass wir die Cross Domain Security aktivieren müssen, da mehrere andere Anwendungen in meinem Unternehmen, die MDBs sind, problemlos funktionieren, indem sie aus einer fernen Warteschlange lesen. Für diese Anwendungen ist in ihren Weblogic-Servern keine domänenübergreifende Sicherheit aktiviert.

Ich verbrachte einige Zeit zu graben und durch etwas Glück entdeckte ich, dass, wenn ich die Weblogic-Server nach der Bereitstellung meiner Anwendung neu gestartet habe, ich den Sicherheitsfehler nicht mehr sehe. Ich kann über die Nachricht in der Remote-Warteschlange benachrichtigt werden.

Obwohl mein Problem gelöst ist, bin ich neugierig zu wissen, warum ich den Fehler bekomme, wenn ich nur die App bereitstellen und die JVM nicht neu starten.

Hinzufügen von mehr Protokollinformationen

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]] 

, wenn man sich die Protokolle anschauen, werden Sie sehen, dass ich den Server neu gestartet und wenn der Server kam verbraucht er die Nachricht @ 08:58:55

+0

Interessant - wurde der Fehler aus Ihrer Anwendung oder dem WebLogic Server selbst anmelden? Gibt es noch mehr zu diesem Stack-Trace? –

+0

Vielen Dank für das Betrachten. Der Fehler war von meiner App, weil der Fehler ausgelöst wird, wenn Frühling versucht, seine Verbindung zu aktualisieren – datta

+0

Ich habe mehr Protokollinformationen hinzugefügt, wenn das hilft. – datta

Antwort

4

Entweder müssen wir die domänenübergreifende Sicherheit aktivieren oder Sie müssen die JVM neu starten

0

Sie können einen Betreff für jeden Weblogic-Dienst authentifizieren. Weitere Informationen 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); 
} 
Verwandte Themen