我尝试用以下方法设置网络代理,但没有一种方法起作用
1:设置jvm变量,如-Dhttp.proxyHost= -Dhttp.proxyPort=......。
2、创造了豆子。
@Bean
public RestTemplate restTemplate() {
final String proxyHost = "######"; // host
final int proxyPort = ####; // port
SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
factory.setProxy(new Proxy(Type.HTTP, new InetSocketAddress(proxyHost, proxyPort)));
return new RestTemplate(factory);
}
字符串
但是这个配置被OAuth2AccessTokenSupport.restTemplate覆盖。
所以下面的方法总是返回新创建的rest模板对象。
org.springframework.security.oauth2.client.token.OAuth2AccessTokenSupport
protected RestOperations getRestTemplate() {
if (restTemplate == null) {
synchronized (this) {
if (restTemplate == null) {
RestTemplate restTemplate = new RestTemplate();
restTemplate.setErrorHandler(getResponseErrorHandler());
restTemplate.setRequestFactory(requestFactory);
restTemplate.setInterceptors(interceptors);
this.restTemplate = restTemplate;
}
}
}
if (messageConverters == null) {
setMessageConverters(new RestTemplate().getMessageConverters());
}
return restTemplate;
}
型
请帮助我覆盖或设置代理的其余模板从OAuth客户端应用程序。
5条答案
按热度按时间uidvcgyl1#
另一种方法是为OAuth2RestTemplate设置一个自定义AccessTokenProvider。在下面的代码示例中,绕过了SSL验证:
字符串
dwbf0jvd2#
这似乎是一个更简单的解决方案:
在带有@Configuration的类中添加以下内容:
字符串
wfveoks03#
这可能不是一个简单的解决方案。但最后通过下面的代码成功地在oauth请求上设置了代理。
注册过滤器
字符串
认证过滤器
型
请求助手代码
型
qjp7pelc4#
我接受的答案对我来说是可行的,但这里有一个更简单的示例代码版本,所以你可以出于任何原因注入一个OAuth2RestTemplate(在我的例子中,我只是想做一些额外的,自定义日志记录):
字符串
然后添加:
型
8fq7wneg5#
如果有人从Google登陆...
我们遇到了与描述相同的问题。花了几天时间试图修复它,包括尝试上面的帖子。我们通过设置JVM代理args而不使用协议来修复它!
错误:
-Dhttp.proxyHost=http://some.host
正确:
-Dhttp.proxyHost=some.host