如何更改 OAuth2RestTemplate 中 MappingJacksonHttpMessageConverter 的 MediaType

2024-03-02

我有一个应用程序,它使用 Spring Source OAuth2 作为客户端从资源服务器检索用户数据并创建本地用户。当 OAuth2ClientContextFilter 尝试检索令牌时,我不断收到错误:

org.springframework.web.client.RestClientException: Could not extract response: no suitable HttpMessageConverter found for response type [org.springframework.security.oauth2.common.OAuth2AccessToken] and content type [application/x-javascript;charset=utf-8]

我知道默认的 MediaType 是“application/json”,所以我尝试像这样自定义 MappingJacksonHttpMessageConverter:

<bean id="jacksonConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
        <property name="supportedMediaTypes">
            <list>
                <bean class="org.springframework.http.MediaType">
                    <constructor-arg value="application"/>
                    <constructor-arg value="x-javascript"/>
                    <constructor-arg value="UTF-8"/>
                </bean>
            </list>
     </property>
</bean>

我还尝试了应该支持的“ALL”构造函数参数*/*内容类型但运气不佳。看http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/http/MediaType.html http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/http/MediaType.html

其他重要信息是我现在正在使用全 XML 配置。我刚刚将 2.5 应用程序升级到 3.1.1。我在 spring security PRE_AUTH 过滤器中使用 OAuth2RestTemplate,而不是在控制器中。所以我没有使用注释来映射其余的调用。我尝试过添加<context:annotation-config/>但这并没有什么区别。

我只是从自定义 AbstractPreAuthenticatedProcessingFilter 调用 OAuth 服务 bean。当服务 bean 尝试执行用户数据的其余调用时,会引发异常,触发 OAuth2ClientContextFilter 尝试检索令牌。这是我的 OAuth2 服务 bean 配置:

<bean id="reprintsOauthService" class="com.coral.user.ReprintsOauthService">
    <property name="reprintsUserInfoUrl" value="https://www.demo.com/api/userinfo.ashx" />
    <property name="reprintsRestTemplate">
        <bean class="org.springframework.security.oauth2.client.OAuth2RestTemplate">
            <constructor-arg ref="reprintsResource"/>
            <property name="messageConverters">
                <list>
                   <ref bean="jacksonConverter"/>
                </list>
            </property>
        </bean>
    </property>
</bean> 

我错过了什么吗?为什么杰克逊不绘制响应图?


固定的!问题是 OAuth2RestTemplate 不用于令牌检索。所以我必须自定义 org.springframework.security.oauth2.client.token.OAuth2AccessTokenSupport 并将 MappingJacksonHttpMessageConverter 添加到现有方法中,如下所示:

  public void setMessageConverters(List<HttpMessageConverter<?>> messageConverters) {
    this.messageConverters = new ArrayList<HttpMessageConverter<?>>(messageConverters);
    this.messageConverters.add(new FormOAuth2AccessTokenMessageConverter());
    this.messageConverters.add(new FormOAuth2ExceptionHttpMessageConverter());

    MappingJacksonHttpMessageConverter jackson = new MappingJacksonHttpMessageConverter();
    List<MediaType> mediaTypes = new ArrayList<MediaType>();
    mediaTypes.add(new MediaType("application", "x-javascript"));
    jackson.setSupportedMediaTypes(mediaTypes);
    this.messageConverters.add(jackson);

    if(logger.isDebugEnabled())
    {
        logger.debug("*** Added custom media type 'application/x-javascript' to the Jackson converter");
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何更改 OAuth2RestTemplate 中 MappingJacksonHttpMessageConverter 的 MediaType 的相关文章

随机推荐

  • jQuery ajax() 选项 - xhr

    在 jQuery ajax 函数中 有 xhr 选项 有人知道这个选项的更多细节 可用性或示例用法吗 对于此函数 您希望返回适合您的浏览器的 XHR 对象 默认行为是使用 XMLHTTPRequest 或 IE 等效项 这是默认行为 jQu
  • 在 MATLAB 中填充两个连接组件之间的区域

    我有一个在 MATLAB 中表示数字的二值图像 我想填写所有数字 期望的结果是 我唯一发现的是imfill函数 但这并没有多大帮助 因为我丢失了内部数据 例如 9 的内圈 另一种可能性是使用BW边界 http www mathworks c
  • 在 Windows 上将 Tensorflow 与 Anaconda 和 PyCharm 结合使用

    我在 Windows 10 64 位上使用 Anaconda 4 3 1 64 位 我已经根据以下内容成功安装了Tensorflow CPU this https www tensorflow org install install win
  • 导入 TensorFlow 会阻止 python 程序运行

    我在安装了 CPython 的 Visual Studio 中设置了 Python 工具 在 Visual Studio 中 如果我运行以下代码 print hello import numpy print hello 程序运行正常 打印两
  • Eclipse/Git:“您正在使用带有 SHA-1 的 RSA 密钥,这不再被允许。请使用较新的客户端或不同的密钥类型。”

    我使用 Git 在 Git 中创建了一个公钥ssh keygen已成功创建为 ssh id rsa pub 然后 我在 SSH 密钥中将其上传到 GitHub 并 授权 其 SSO 功能 现在所有内容都已上传 When cloning a
  • ObjectMapper.writeValueAsString 输出中的重复值

    我正在使用杰克逊ObjectMapper使用多态嵌套类对类进行 反 序列化 JSON 到类的反序列化工作正常 但是当我尝试使用以下命令将类序列化为 JSON 时writeValueAsString函数我在输出中观察到重复值 public c
  • 火狐滚动条

    伙计们 有没有一种方法可以在 Firefox 中自定义滚动条 我尝试在 chrome 上使用类似的技术 但我想这仅适用于 chrome 经过一些研究后 我发现无法使用此方法在 Firefox 上自定义它由于引擎中的错误 所以我正在寻找一种替
  • 使用 Vision api 在脸上用可绘制/绘画进行拍照

    我在尝试什么 我正在尝试在脸上使用可绘制 绘画来拍照 但是我无法将两者都放在同一张照片上 我已经尝试过什么 我尝试过使用CameraSource takePicture但我只是得到了脸上没有任何可绘制 油漆的脸 mCameraSource
  • jqGrid - 防止取消选择行

    使用 jqGrid 如果我再次单击所选行 则该行将被取消选择 有什么办法可以防止这种情况发生吗 我希望该行仍被选中 很好的解决方案 更紧凑的版本 beforeSelectRow function rowid e return this ge
  • Java数据文件在类之间共享

    我正在制作一个从文件 Serialized objectInputStream 读取的小程序 该文件是一个注册表列表 其中每个条目都有一个设置为 true 或 false 的布尔变量 在这个程序中 我有两个独立的 JPanel 类 一个是
  • javascript代码是否需要以“