【问题标题】:Spring Social: redirect url when server behind proxySpring Social:当服务器在代理后面时重定向 url
【发布时间】: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>

【问题讨论】:

    标签: spring spring-security spring-security-oauth2 spring-social


    【解决方案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
    猜你喜欢
    • 2023-02-20
    • 2016-11-14
    • 2016-05-28
    • 2016-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多