Spring security 如何使Sprint Boot+安全应用程序重定向主机

Spring security 如何使Sprint Boot+安全应用程序重定向主机,spring-security,spring-boot,thymeleaf,Spring Security,Spring Boot,Thymeleaf,我有一个应用程序在一个apache实例后面的tomcat中运行。来自apache的请求通过mod_rewrite代理,因为这可以在.htaccess中配置,而我无权访问vhost配置mod_jk甚至没有安装 .htaccess如下所示: RewriteRule ^/?my-app/(.*)$ http://localhost:8080/my-app/$1 [P] Thymeleaf很好地将上下文名称附加到所有URL,并生成相对的URL,如/my app/relative/path,因此不需要h

我有一个应用程序在一个apache实例后面的tomcat中运行。来自apache的请求通过mod_rewrite代理,因为这可以在.htaccess中配置,而我无权访问vhost配置mod_jk甚至没有安装

.htaccess如下所示:

RewriteRule ^/?my-app/(.*)$ http://localhost:8080/my-app/$1 [P]
Thymeleaf很好地将上下文名称附加到所有URL,并生成相对的URL,如/my app/relative/path,因此不需要http://hostname-part 通过HTML,它在这个设置中完美地工作

不幸的是,当我使用Spring MVC重定向某些内容时

@RequestMapping("/redirect-to-relative-path")
public String redirect() {
    return "redirect:/relative/path";
}
…用户将被重定向到http://localhost:8080/my-app/relative/path而不是/my app/relative/path,这对外部用户不起作用

此外,Spring Security将尚未授权的用户重定向到http://localhost:8080/my-应用程序/登录,而不仅仅是/我的应用程序/登录

我知道我可以使用完整的URL重定向到,但这应该是动态的


让框架重定向到相对URL而不是附加主机名的最佳spring引导方式是什么。。。基本上就像Thymeleaf所做的那样

协议标准说重定向URL应该必须?绝对的

尝试在Tomcat配置中设置proxyName和proxyPort:


这些应该是Apache实例的公共属性。

谢谢!说得好。已在本地尝试该proxyName/-Port,并可确认其正常工作。但是,我担心在这个目标框上,因为我不允许更改apache配置,也不允许更改server.xml。Re:协议标准声明:HTTP 1.1规范IETF RFC 2616的过时版本需要一个用于重定向的完整绝对URI。[…]大多数流行的web浏览器允许传递相对URL,因此,更新的HTTP 1.1规范IETF RFC 7231[…]允许在位置头中使用相对URL。