基于 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条答案
按热度按时间wh6knrhe16#
这个bug我也遇到了,目前是把FastJsonHttpMessageConverter去掉了。
q3aa052517#
# 集成 fastjson 的配置如下:
@configuration
public class WebMvcConfigurer extends WebMvcConfigurerAdapter {
...
/**
*/
@OverRide
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
FastJsonConfig config = new FastJsonConfig();
config.setSerializerFeatures(
SerializerFeature.DisableCircularReferenceDetect
);
converter.setFastJsonConfig(config);
converters.add(converter);
log.info("FastJSON enabled");
}
...
}
# /oauth/token 获取到的报文如下(其中 value 即是 access token):
{
"expiration": 1513752144897,
"expired": false,
"expiresIn": 604799,
"refreshToken": {
"expiration": 1515739344897,
"value": "dae50004-939c-40f2-98d8-4882374e08c7"
},
"scope": [
"api"
],
"tokenType": "bearer",
"value": "1e2c4181-01be-4aa1-8042-c2d2f74008d0"
}
# 而不集成 fastjson 时,获取到的报文如下:
{
"access_token": "d83156d4-cec3-4aa9-b9dc-78612ce3cd92",
"token_type": "bearer",
"refresh_token": "37d7638a-8ee2-4a74-8194-cf9673ab1689",
"expires_in": 604799,
"scope": "api"
}
多谢!