java - 序列化问题: org. springframework.dao.support.PersistenceExceptionTranslationInterceptor

标签 java spring serialization deserialization spring-security-oauth2

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

相关文章:

java - 如何在 spring-cloud-stream-binder-kafka-streams :3. 1.1 中使用功能方法检索/设置 header

java - 在 Java、Play Framework 2.2.1 中 Gzip 文件

Javascript:stringify对象(包括类型函数的成员)

java - 反转(解析输出)Arrays.toString(int[])

javascript - 使用 Jquery 的 Ajax 函数返回 400 错误

c++ - Linux: C++:/usr/bin/ld: 找不到 -llibboost_serialization

java - 序列化与数据库存储

java - 如何在for循环中获取前2个元素然后跳过第三个元素java

java - Spring MVC - POST 请求后奇怪的重定向

java - 在本地 Tomcat 上部署 spring soap 消费者 Jaxb 生成的文件