我尝试通过以下方式设置网络代理,但任何一种方法均无效
1:设置jvm变量,例如-Dhttp.proxyHost = -Dhttp.proxyPort = .......
2:创建Bean。
@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);
}
Run Code Online (Sandbox Code Playgroud)
但是,此配置被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 …Run Code Online (Sandbox Code Playgroud) proxy spring spring-security spring-boot spring-security-oauth2
作为上下文,我一直在尝试获得一个相当简单的 @SprintBootApplication,其中包含一个附加的 @EnableOAuth2Sso 注释,并且与 WSO2 Identity Server 集成了很长一段时间。
在我看来,让这个工作应该是一个配置问题(正如在Spring Cloud Security上所宣传的那样) - 但到目前为止我没有运气。
为了了解发生了什么,我使用调试器逐步执行 spring-security-oauth2 代码以找出发生了什么。这样做时,我注意到我的 AccessTokenRequest 的 PreservedState 永远为空,并产生与 CSRF 相关的 InvalidRequestException。这是相关代码:
public class AuthorizationCodeAccessTokenProvider extends OAuth2AccessTokenSupport implements AccessTokenProvider {
....
private MultiValueMap<String, String> getParametersForTokenRequest(AuthorizationCodeResourceDetails resource,
AccessTokenRequest request) {
MultiValueMap<String, String> form = new LinkedMultiValueMap<String, String>();
form.set("grant_type", "authorization_code");
form.set("code", request.getAuthorizationCode());
Object preservedState = request.getPreservedState();
if (request.getStateKey() != null || stateMandatory) {
// The token endpoint has no use for the state so we don't send it back, …Run Code Online (Sandbox Code Playgroud) spring-security wso2is spring-boot spring-security-oauth2 spring-cloud