在 JdbcTokenStore.java 中序列化 oauth2 密码流的身份验证对象时,出现以下异常。
INFO org.springframework.security.oauth2.provider.endpoint.TokenEndpoint - Handling error: IllegalArgumentException, java.io.NotSerializableException: org.springframework.dao.support.PersistenceExceptionTranslationInterceptor
- field (class "org.springframework.dao.annotation.PersistenceExceptionTranslationAdvisor", name: "advice", type: "class org.springframework.dao.support.PersistenceExceptionTranslationInterceptor")
- object (class "org.springframework.dao.annotation.PersistenceExceptionTranslationAdvisor", org.springframework.dao.annotation.PersistenceExceptionTranslationAdvisor@188598ad)
- element of array (index: 0)
- array (class "[Lorg.springframework.aop.Advisor;", size: 1)
- field (class "org.springframework.aop.framework.AdvisedSupport", name: "advisorArray", type: "class [Lorg.springframework.aop.Advisor;")
- object (class "org.springframework.aop.framework.ProxyFactory", org.springframework.aop.framework.ProxyFactory: 0 interfaces []; 1 advisors [org.springframework.dao.annotation.PersistenceExceptionTranslationAdvisor@188598ad]; targetSource [SingletonTargetSource for target object [com.citruspay.um.config.dao.UMConfigProperties@4e8bc1c1]]; proxyTargetClass=true; optimize=false; opaque=false; exposeProxy=false; frozen=false)
- field (class "org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor", name: "advised", type: "class org.springframework.aop.framework.AdvisedSupport")
- object (class "org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor", org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor@5be0dce3)
- field (class "com.citruspay.um.config.dao.UMConfigProperties$$EnhancerBySpringCGLIB$$e4b0fa51", name: "CGLIB$CALLBACK_0", type: "interface org.springframework.cglib.proxy.MethodInterceptor")
- object (class "com.citruspay.um.config.dao.UMConfigProperties$$EnhancerBySpringCGLIB$$e4b0fa51", com.citruspay.um.config.dao.UMConfigProperties@4e8bc1c1)
- field (class "com.citruspay.common.security.auth.CPUserDetailsImpl", name: "umConfigProperties", type: "class com.citruspay.um.config.dao.UMConfigProperties")
- object (class "com.citruspay.common.security.auth.CPUserDetailsImpl", com.citruspay.common.security.auth.CPUserDetailsImpl@5a328ad9)
- field (class "com.citruspay.common.security.auth.CPUserDetailsImpl$1", name: "this$0", type: "class com.citruspay.common.security.auth.CPUserDetailsImpl")
- object (class "com.citruspay.common.security.auth.CPUserDetailsImpl$1", com.citruspay.common.security.auth.CPUserDetailsImpl$1@37ddcf60)
- custom writeObject data (class "java.util.ArrayList")
- object (class "java.util.ArrayList", [com.citruspay.common.security.auth.CPUserDetailsImpl$1@37ddcf60, com.citruspay.common.security.auth.CPUserDetailsImpl$1@861404d, com.citruspay.common.security.auth.CPUserDetailsImpl$1@7c17f286, com.citruspay.common.security.auth.CPUserDetailsImpl$1@e33e97c])
- field (class "java.util.Collections$UnmodifiableCollection", name: "c", type: "interface java.util.Collection")
- object (class "java.util.Collections$UnmodifiableList", [com.citruspay.common.security.auth.CPUserDetailsImpl$1@37ddcf60, com.citruspay.common.security.auth.CPUserDetailsImpl$1@861404d, com.citruspay.common.security.auth.CPUserDetailsImpl$1@7c17f286, com.citruspay.common.security.auth.CPUserDetailsImpl$1@e33e97c])
- field (class "org.springframework.security.authentication.AbstractAuthenticationToken", name: "authorities", type: "interface java.util.Collection")
- root object (class "org.springframework.security.oauth2.provider.OAuth2Authentication", org.springframework.security.oauth2.provider.OAuth2Authentication@58609f14: Principal: 23812803521413120; Credentials: [PROTECTED]; Authenticated: true; Details: null; Granted Authorities: com.citruspay.common.security.auth.CPUserDetailsImpl$1@37ddcf60, com.citruspay.common.security.auth.CPUserDetailsImpl$1@861404d, com.citruspay.common.security.auth.CPUserDetailsImpl$1@7c17f286, com.citruspay.common.security.auth.CPUserDetailsImpl$1@e33e97c)
有人知道这是什么意思吗? 哪个类不可序列化,如何解决?
附注我尝试通过序列化和配置它而不是 PersistenceExceptionTranslationInterceptor 来扩展名为 CustomPersistenceExceptionTranslationInterceptor.java 的 PersistenceExceptionTranslationInterceptor.java,但它不起作用。
最佳答案
您的“身份验证对象”应该实现 Serialized
接口(interface),并且 ObjectImpl 的所有成员本身都应该是可序列化的。
关于java - 序列化问题: org. springframework.dao.support.PersistenceExceptionTranslationInterceptor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35985563/