我正在尝试安装CAS服务器4.0.0版实例,并配置票证注册表。当我尝试登录时,我遇到的问题是JpaTicketRegistry
。
基本上,当我登录时,将创建一个Authentication
对象,并为该身份验证创建一个TicketGrantingTicket
,并且应该将其与票证注册表一起保存。 TicketGrantingTicket
具有一个authentication
属性,应保留为Lob
。问题是,创建AuthenticationBuilder
的Authentication
将其中的attributes
属性设置为LinkedHashMap
,其中包括不可序列化的类LinkedKeySet
。现在,当JpaTicketRegistry
尝试保留TicketGrantingTicket
时,由于SerializationException
,它失败了。
当出于相同原因尝试将EhCacheTicketRegistry
与ehcache保存到磁盘时,会出现相同的问题。有没有办法解决这个问题,以便我可以坚持这个目标?
CAS 4.0使用Hibernate 4.1.0作为JPA实现并使用Spring 3.2.6
最佳答案
问题如下。在org.jasig.cas.authentication.SuccessfulHandlerMetaDataPopulator
中,populateAttributes
方法添加keyset
映射的successes
。问题是keyset
是java.util.LinkedHashMap$LinkedKeySet
的实例,该实例不可序列化,导致在登录后使用SerializationException
甚至TicketGrantingTicket
写入磁盘时尝试保留JpaTicketRegistry
时导致EHCacheTicketRegistry
已启用。
我创建了自己的AuthenticationMetaDataPopulator
,并为CAS团队创建了issue,并创建了pull request
关于java - CAS JpaTicketRegistry无法正常工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26037532/