我目前正在使用一个相当普遍的Spring Security Oauth2版本2.0.7.RELEASE设置JdbcTokenStore
并且最近遇到了一个有趣的问题。
据我所知,在创建和存储访问令牌时,Authentication
对象被序列化并且也会持久保存到数据库中。我知道这是必要的,并且在稍后在请求中使用访问令牌时使用。问题是我的Authentication
对象(Spring Security的UserDetails接口的自定义impl)与我的应用程序域中的其他对象相关联。 (示例对象图可能看起来像身份验证 - > com.myapp.User - > com.myapp.PhoneNumber)
我必须对实现所述对象进行一些更改,并注意到在我更改之前序列化并存储到数据库的Authentication
对象不再反序列化,这是有道理的,因为我的对象模型已经改变。 / p>
管理此方案的推荐方法是什么?有没有办法让Authentication
对象序列化为JSON而不是二进制?我倾向于从我的Authentication
对象中删除我的自定义信息,但我想知道是否有更好的方法?
答案 0 :(得分:0)
要关闭循环 - 我最终使用的方法是扩展JdbcTokenStore
并覆盖方法serializeAuthentication
和deserializeAuthentication
以使用Jackson执行序列化/反序列化。然后在我的对象模型中,我@JsonIgnore
显示了在验证用户时不需要的实体。