Spring Social:当服务器在代理后面时重定向 url
Posted
技术标签:
【中文标题】Spring Social:当服务器在代理后面时重定向 url【英文标题】:Spring Social: redirect url when server behind proxy 【发布时间】:2017-09-03 15:06:30 【问题描述】:在我的 Spring Boot 应用程序中,我使用 Spring Social (1.1.4.RELEASE)(Facebook、Google、LinkedIn 和 Twitter)实现了登录。
在登录过程中,服务器调用以下 HTTP GET:
https://accounts.google.com/o/oauth2/auth?client_id=XXX&response_type=code&redirect_uri=http://xzy.com:91/auth/google&scope=email&state=YYY
问题在这里:redirect_uri=http://xzy.com:91/auth/google
代理后面的应用程序,我需要将redirect_uri更改为
http://xzy.com:91/auth/google -> http://xzy.com/auth/google
我想这是很常见的问题,但我找不到可行的解决方案(
我的 pom:
<dependency>
<groupId>org.springframework.social</groupId>
<artifactId>spring-social-security</artifactId>
<version>$spring-social-version</version>
</dependency>
<dependency>
<groupId>org.springframework.social</groupId>
<artifactId>spring-social-linkedin</artifactId>
<version>$spring-social-linkedin.version</version>
</dependency>
<dependency>
<groupId>org.springframework.social</groupId>
<artifactId>spring-social-twitter</artifactId>
<version>$spring-social-twitter.version</version>
</dependency>
<dependency>
<groupId>org.springframework.social</groupId>
<artifactId>spring-social-google</artifactId>
<version>$spring-social-google.version</version>
</dependency>
<dependency>
<groupId>org.springframework.social</groupId>
<artifactId>spring-social-facebook</artifactId>
<version>$spring-social-facebook.version</version>
</dependency>
【问题讨论】:
【参考方案1】:@Bean
public ProviderSignInController providerSignInController(ConnectionFactoryLocator connectionFactoryLocator, UsersConnectionRepository usersConnectionRepository)
ProviderSignInController controller = new ProviderSignInController(connectionFactoryLocator, usersConnectionRepository, new SimpleSignInAdapter());
// get the url from config, this just for example
controller.setApplicationUrl("http://xzy.com");
return controller;
从spring-social
中的代码可以看出,application url
将替换基本 url。
protected String callbackUrl(NativeWebRequest request)
if (callbackUrl != null)
return callbackUrl;
HttpServletRequest nativeRequest = request.getNativeRequest(HttpServletRequest.class);
if (applicationUrl != null)
return applicationUrl + connectPath(nativeRequest);
else
return nativeRequest.getRequestURL().toString();
【讨论】:
感谢您的建议,但还是不行。似乎这适用于 HTTP GET xxx/signup/facebook,但我的请求是 xxx/auth/facebook 请发布您的配置 这可以动态完成吗?就我而言,我有一个网站,例如localhost:4200
在用户注册后我想重定向到。但是如果我在localhost:4201
上有第二个客户呢?是否可以根据来电者来改变这种行为?
您找到解决方案了吗? @TomasMarik以上是关于Spring Social:当服务器在代理后面时重定向 url的主要内容,如果未能解决你的问题,请参考以下文章
在 Spring Boot 中将 HTTP 定向到代理后面的 HTTPS
在反向代理后面使用 OAuth2 的 Spring Boot
在反向代理后面使用 SP 时出现 Spring saml 问题
在 Zuul 代理后面时出现 Spring 重定向 url 问题