[
https://issues.apache.org/jira/browse/SHIRO-323?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13176694#comment-13176694
]
Les Hazlewood commented on SHIRO-323:
-------------------------------------
Hi Michael,
I'm not sure if the DelegatingSubject should be serializable: the
implementation always needs a SecurityManager to function, and a
SecurityManager instance is not serializable. If a DelegatingSubject instance
was passed across the wire, something would need to acquire the local
SecurityManager, associate it with the de-serialized DelegatingSubject, and
then bind it to the thread for duration of the invocation.
Did you get this working in your JMS environment? If so, how? Did you use the
Subject.Builder to recreate the Subject on the receiving side?
Thanks,
Les
> DelegatingSubject class cannot be serialized.
> ---------------------------------------------
>
> Key: SHIRO-323
> URL: https://issues.apache.org/jira/browse/SHIRO-323
> Project: Shiro
> Issue Type: Bug
> Components: Subject
> Affects Versions: 1.1.0
> Environment: Linux
> Reporter: Michael Yara
> Labels: serialization
>
> I am attempting to send a instance of DelegatingSubject over a JMS topic via
> serialization, however when I send the object through JMS I get this Exception
> java.lang.RuntimeException:
> org.apache.shiro.subject.support.DelegatingSubject$StoppingAwareProxiedSession
> at
> org.apache.activemq.command.ActiveMQObjectMessage.storeContent(ActiveMQObjectMessage.java:111)
> ~[activemq-all-5.6-SNAPSHOT.jar:5.6-SNAPSHOT]
> at
> org.apache.activemq.command.ActiveMQObjectMessage.setObject(ActiveMQObjectMessage.java:162)
> ~[activemq-all-5.6-SNAPSHOT.jar:5.6-SNAPSHOT]
> at
> com.xmlnamespace.panel.server.core.communication.event.EventManager.doSendMessage(EventManager.java:233)
> ~[com.xmlnamespace.panel.server.core/:na]
> at
> com.xmlnamespace.panel.server.core.communication.event.EventManager.sendMessage(EventManager.java:208)
> ~[com.xmlnamespace.panel.server.core/:na]
> at
> com.xmlnamespace.panel.server.core.communication.mtl.ModelDispatcher.add(ModelDispatcher.java:122)
> ~[com.xmlnamespace.panel.server.core/:na]
> at
> com.xmlnamespace.panel.server.core.communication.mtl.ModelDispatcher.collectionChange(ModelDispatcher.java:181)
> ~[com.xmlnamespace.panel.server.core/:na]
> at
> com.xmlnamespace.panel.core.shared.communication.mtl.api.CollectionChangeSupport.doFireCollectionChange(CollectionChangeSupport.java:182)
> ~[shared-objects.jar:na]
> at
> com.xmlnamespace.panel.core.shared.communication.mtl.api.CollectionChangeSupport.fireCollectionChange(CollectionChangeSupport.java:47)
> ~[shared-objects.jar:na]
> at
> com.xmlnamespace.panel.core.shared.user.model.internal.UserModelImpl.addUserLogin(UserModelImpl.java:96)
> ~[shared-objects.jar:na]
> at
> com.xmlnamespace.panel.server.core.login.LoginManager.authenticateConnection(LoginManager.java:1013)
> ~[com.xmlnamespace.panel.server.core/:na]
> at
> com.xmlnamespace.panel.server.core.communication.broker.BrokerAuthenticationFilter.addConnection(BrokerAuthenticationFilter.java:69)
> ~[com.xmlnamespace.panel.server.core/:na]
> at
> org.apache.activemq.broker.MutableBrokerFilter.addConnection(MutableBrokerFilter.java:91)
> [activemq-all-5.6-SNAPSHOT.jar:5.6-SNAPSHOT]
> at
> org.apache.activemq.broker.TransportConnection.processAddConnection(TransportConnection.java:705)
> [activemq-all-5.6-SNAPSHOT.jar:5.6-SNAPSHOT]
> at
> org.apache.activemq.broker.jmx.ManagedTransportConnection.processAddConnection(ManagedTransportConnection.java:83)
> [activemq-all-5.6-SNAPSHOT.jar:5.6-SNAPSHOT]
> at
> org.apache.activemq.command.ConnectionInfo.visit(ConnectionInfo.java:139)
> [activemq-all-5.6-SNAPSHOT.jar:5.6-SNAPSHOT]
> at
> org.apache.activemq.broker.TransportConnection.service(TransportConnection.java:316)
> [activemq-all-5.6-SNAPSHOT.jar:5.6-SNAPSHOT]
> at
> org.apache.activemq.broker.TransportConnection$1.onCommand(TransportConnection.java:180)
> [activemq-all-5.6-SNAPSHOT.jar:5.6-SNAPSHOT]
> at
> org.apache.activemq.transport.TransportFilter.onCommand(TransportFilter.java:69)
> [activemq-all-5.6-SNAPSHOT.jar:5.6-SNAPSHOT]
> at
> org.apache.activemq.transport.WireFormatNegotiator.onCommand(WireFormatNegotiator.java:113)
> [activemq-all-5.6-SNAPSHOT.jar:5.6-SNAPSHOT]
> at
> org.apache.activemq.transport.InactivityMonitor.onCommand(InactivityMonitor.java:227)
> [activemq-all-5.6-SNAPSHOT.jar:5.6-SNAPSHOT]
> at
> org.apache.activemq.transport.TransportSupport.doConsume(TransportSupport.java:83)
> [activemq-all-5.6-SNAPSHOT.jar:5.6-SNAPSHOT]
> at
> org.apache.activemq.transport.tcp.SslTransport.doConsume(SslTransport.java:91)
> [activemq-all-5.6-SNAPSHOT.jar:5.6-SNAPSHOT]
> at
> org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:217)
> [activemq-all-5.6-SNAPSHOT.jar:5.6-SNAPSHOT]
> at
> org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:199)
> [activemq-all-5.6-SNAPSHOT.jar:5.6-SNAPSHOT]
> at java.lang.Thread.run(Thread.java:662) [na:1.6.0_26]
> Caused by: java.io.NotSerializableException:
> org.apache.shiro.subject.support.DelegatingSubject$StoppingAwareProxiedSession
> at
> java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1164)
> ~[na:1.6.0_26]
> at
> java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1518)
> ~[na:1.6.0_26]
> at
> java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1483)
> ~[na:1.6.0_26]
> at
> java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400)
> ~[na:1.6.0_26]
> at
> java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158)
> ~[na:1.6.0_26]
> at
> java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1518)
> ~[na:1.6.0_26]
> at
> java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1483)
> ~[na:1.6.0_26]
> at
> java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400)
> ~[na:1.6.0_26]
> at
> java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158)
> ~[na:1.6.0_26]
> at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:330)
> ~[na:1.6.0_26]
> at
> org.apache.activemq.command.ActiveMQObjectMessage.storeContent(ActiveMQObjectMessage.java:105)
> ~[activemq-all-5.6-SNAPSHOT.jar:5.6-SNAPSHOT]
> ... 24 common frames omitted
> I assume that DelegatingSubject is meant to be serialized since it does
> implement serializable. I noticed that the class inner class
> StoppingAwareProxiedSession is the culprit. Would the issue be resolved by
> simply making the Session interface, ProxiedSession class, and
> StoppingAwareProxiedSession serializable?
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira