使用 fastjson 时, spring security oauth2 获取 token 格式变化

yws3nbqq  于 2021-11-27  发布在  Java
关注(0)|答案(17)|浏览(399)

基于 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 格式一致呢?

wh6knrhe

wh6knrhe16#

这个bug我也遇到了,目前是把FastJsonHttpMessageConverter去掉了。

q3aa0525

q3aa052517#

# 集成 fastjson 的配置如下:

@configuration
public class WebMvcConfigurer extends WebMvcConfigurerAdapter {
...
/**

  • 使用 FastJson 替换 Jackson
  • @param converters
    */
    @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"
}

多谢!

相关问题