基于 spring boot 1.5.x 的项目,使用 webmvc + security + oauth2。
集成 fastjson 前,使用缺省的 jackson,.../oauth/token 获取的响应中 token 名称是access_token: xxxxxxx,和 spring 文档一致。
集成 fastjson 后,.../oauth/token 获取的响应中 token 名称变成value: xxxxxxx,且其他字段名及格式均有变化,如果服务器发生异常,甚至会把 exception stack 全部返回,与 spring 文档不一致。
如何才能使spring oauth在使用 fastjson 和 jackson 时返回的 token 格式一致呢?
17条答案
按热度按时间tez616oj1#
我也遇到了,目前只能把FastJsonHttpMessageConverter先去掉
7lrncoxx2#
为啥要修改转换器,再写一个转换器就行了,你这个才要修改加上判断逻辑
ltskdhd13#
扩展下,上面问题回答针对的只是OAuth2AccessToken,如果我们的项目还有其他的http请求需要处理,则需要修改上面的转换器,只处理token的回执保持兼容,其他请求的回执仍然保持原样
axr492tv4#
不好意思,当时我看错了,这段时间比较忙没看这个问题,你需要自行写个HttpMessageConverter来转换OAuth2AccessToken,fastjson本身也意识到这个问题,但是FormOAuth2AccessTokenMessageConverter这个类的writeInternal方法没有进行实现,你需要自行实现转换
加入MessageConverters
你可以参考
OAuth2AccessToken
这个序列化类OAuth2AccessTokenJackson2Serializer
进行编写相应的代码nvbavucw5#
你好,可以详细讲一下。如何把这个FormOAuth2AccessTokenMessageConverter 加到 HttpMessageConverter中的方案吗?非常感谢
iyfjxgzm6#
已经提供了解决方案,将FormOAuth2AccessTokenMessageConverter这个加入HttpMessageConverter中即可
nnt7mjpx7#
这个就太坑了 如果这样改 后续岂不是还有很多其他错误可能发生?有一套整体的解决方案不
k4emjkb18#
我也碰到这类问题,最后通过fastjson 自定了一个SerializeFilter进行处理DefaultOAuth2AccessToken的序列化
FastJsonHttpMessageConverter中加入自定义的SerializeFilter
后面又发现FormOAuth2AccessTokenMessageConverter的实现,可以把这个加进去测试一下
vyswwuz29#
可以考虑手动生成token流程,并在最后序列化的时候使用Jackson的ObjectMapper进行序列化并返回给客户端。(之前我的回复过于模糊,实在抱歉)
希望能够解决你们的问题
n7taea2i10#
fastjson配置发出来,
错误的json和正确的也发出来。
wb1gzix011#
貌似还没解决,就因为这个,换回去用 jackson 了
olmpazwi12#
我也遇到了,这个问题怎么解决呢? 现在我是在每个spring boot项目的启动文件中单独设置。
cidc1ykv13#
我跟你碰到的问题一样 请问你最后怎么解决的
tktrz96b14#
You can Autowired
ObjectMapper
Just like this:
mklgxw1f15#
请问这个问题解决了吗?