Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

java.io.NotSerializableException: org.apache.catalina.session.StandardSessionFacade #21

Closed
lizhen1770 opened this issue Nov 28, 2018 · 2 comments
Assignees

Comments

@lizhen1770
Copy link

lizhen1770 commented Nov 28, 2018

Hi,My project use springboot2.0.6、tomcat9.0.10、jdk1.8 and use spring security to control login.I can open the login view,but login failed and log say:
tomcat.request.session.redis.SessionManager.save Error occured while saving the session object in data cache..
java.io.NotSerializableException: org.apache.catalina.session.StandardSessionFacade
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348)
at java.util.HashMap.internalWriteEntries(HashMap.java:1790)
at java.util.HashMap.writeObject(HashMap.java:1363)
at sun.reflect.GeneratedMethodAccessor220.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:1128)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1496)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
at java.io.ObjectOutputStream.writeUnshared(ObjectOutputStream.java:415)
at tomcat.request.session.SerializationUtil.getSessionAttributesHashCode(SerializationUtil.java:60)
at tomcat.request.session.redis.SessionManager.save(SessionManager.java:299)
at tomcat.request.session.redis.SessionManager.afterRequest(SessionManager.java:333)
at tomcat.request.session.redis.SessionHandlerValve.invoke(SessionHandlerValve.java:39)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:668)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:764)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1388)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)

Thanks.

@ran-jit
Copy link
Owner

ran-jit commented Nov 29, 2018

Hi @lizhen1770,

This session manager accepts only the Serializable objects. If you try to set session with non-serializable object (value) you will get this exception.

screenshot 2018-11-30 at 2 03 37 am

Resolution: Please implement the classes with Serializable interface.

screenshot 2018-11-30 at 2 12 24 am

Reason: We're converting an object (value) into a stream of bytes and storing it into redis data cache. So please implement the classes with serializable and add the "serialVersionUID" (During serialization, java runtime associates a version number with each serializable classes. This number called serialVersionUID, which is used during deserialization to verify the serialized object).

Hope it helps!!

Thanks!

@ran-jit ran-jit self-assigned this Nov 29, 2018
@ran-jit
Copy link
Owner

ran-jit commented Nov 30, 2018

I've added a note in Readme file.

@ran-jit ran-jit closed this as completed Nov 30, 2018
@ran-jit ran-jit mentioned this issue Dec 3, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants