Spring 春季重定向发生在;http://...../login" 而不是",;https://...../login"

Spring 春季重定向发生在;http://...../login" 而不是",;https://...../login",spring,azure,spring-security,azure-web-app-service,Spring,Azure,Spring Security,Azure Web App Service,我已经部署了一个war文件,该文件由SpringBoot应用程序使用oauth2生成,用于使用Azure应用程序服务(仅限https)进行单点登录 当我浏览到主页时,主页会加载一个登录按钮。 单击“登录”按钮时,将发生重定向“http://..../login(/login是默认的sso登录路径)由于我的应用程序服务仅为https,http url不起作用 我在application.property文件中尝试了重定向uri设置,但没有帮助。 有人面对过这个问题吗? 怎么解决呢? 我发现了前面提

我已经部署了一个war文件,该文件由SpringBoot应用程序使用oauth2生成,用于使用Azure应用程序服务(仅限https)进行单点登录

当我浏览到主页时,主页会加载一个登录按钮。 单击“登录”按钮时,将发生重定向“http://..../login(/login是默认的sso登录路径)由于我的应用程序服务仅为https,http url不起作用

我在application.property文件中尝试了重定向uri设置,但没有帮助。 有人面对过这个问题吗? 怎么解决呢?


我发现了前面提到的类似问题

当您的Tomcat服务器位于代理之后时,就会发生此问题。HTTPS请求在代理处终止,然后代理使用HTTP协议与Tomcat服务器通信。如果您将代码部署到Azure(应用程序服务)等云提供商上,您将面临这个问题

对于任何面临此问题的人,以下是解决方案:

在application.properties文件中,添加以下内容。注意:有些属性在Spring Boot 2.*版本中具有不同的名称

security.oauth2.client.pre-established-redirect-uri=https://yourappurl.net/login
security.oauth2.client.registered-redirect-uri=https://yourappurl.net/login
security.oauth2.client.use-current-uri=false
server.tomcat.remote-ip-header=x-forwarded-for
server.tomcat.protocol-header=x-forwarded-proto
server.tomcat.use-relative-redirects=true
server.use-forward-headers=true
server.tomcat.internal-proxies=.*

在SpringBootApplication类中,添加以下bean。使用Spring Boot时,您在客户端为登录按钮设置了什么url路径?@tashkhisi我正在使用Spring oauth2的sso。因此“/login”是默认的sso.login-path。当我在application.properties中设置此属性时,将不会执行默认sso
import org.springframework.core.Ordered;
import org.springframework.web.filter.ForwardedHeaderFilter;
@Bean
FilterRegistrationBean<ForwardedHeaderFilter> forwardedHeaderFilter() {
    final FilterRegistrationBean<ForwardedHeaderFilter> filterRegistrationBean = new FilterRegistrationBean<ForwardedHeaderFilter>();
    filterRegistrationBean.setFilter(new ForwardedHeaderFilter());
    filterRegistrationBean.setOrder(Ordered.HIGHEST_PRECEDENCE);
    return filterRegistrationBean;
}
http.requiresChannel().anyRequest().requiresSecure();