spring - Spring重定向发生在“http://...../login”而不是“https://...../login”
问题描述
我已经使用 oauth2 部署了一个由 spring boot 应用程序生成的 war 文件,用于使用 Azure App 服务(仅限 https)进行单点登录。
当我浏览到主页时,主页会加载一个登录按钮。单击登录按钮时,将重定向到“http://..../login”(/login 是默认的 sso 登录路径)由于我的应用程序服务仅是 https,因此 http url 不起作用。
我已经尝试了 application.property 文件中的 redirect_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 <= 2.1.x,您必须提供 ForwardedHeaderFilter-Bean。从 Spring Boot 2.2.0 开始,您不必再这样做了。
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;
}
在 AppConfiguration 类的 configure 方法中添加以下行:
http.requiresChannel().anyRequest().requiresSecure();
有关官方信息,请访问此页面。
推荐阅读
- javascript - 我有一组对象,如果其中一个键匹配(不覆盖初始属性),我想将它们组合成一个对象
- sql - 如何通过oracle中的游标更新另一个表列中不同行的表列
- php - 尝试将 xampp 数据库表连接到 php:错误未定义变量:mysqli_query 和致命错误
- node.js - 通过 Node.js 从 API 请求信息
- python - 如何使用包含占位符的“subprocess.check_call”运行“ls”命令?
- ios - 删除自定义数组中元素的安全优雅的方式,Swift
- mongodb - 如何更改嵌入类型的属性名称?
- scala - 如何通过改变随机值获得加特林模拟
- python - 在 pandas 数据框列中仅保留重复四次以上的行
- c# - 为什么我不能从反序列化的 Newtonsoft json 访问这个动态属性