【问题标题】:How to make a Sprint Boot + Security application redirect host-relative如何使 Spring Boot + Security 应用程序重定向主机相对
【发布时间】:2015-02-05 09:04:40
【问题描述】:

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

.htaccess 如下所示:

RewriteRule ^/?my-app/(.*)$ http://localhost:8080/my-app/$1 [P]

Thymeleaf 很好地将上下文名称附加到所有 URL,并通过 HTML 生成相对名称,例如 /my-app/relative/path(因此没有 http://hostname-part),它们在此设置中完美运行。

不幸的是,一旦我使用 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-app/login 而不仅仅是 /my-app/login

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

使框架重定向到相对 URL 而不是附加主机名的最佳 (spring-boot-) 方法是什么? (...基本上就像 Thymeleaf 正在做的那样)

【问题讨论】:

    标签: spring-security spring-boot thymeleaf


    【解决方案1】:

    协议标准规定重定向 URL 应该(必须?)是绝对的。

    尝试在您的 Tomcat 配置中设置 proxyNameproxyPort

    <Connector port="8080" ... proxyName="www.mycompany.com" proxyPort="80"/>
    

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

    【讨论】:

    • 谢谢!好点子。在本地尝试了 proxyName/-Port 并且可以确认它有效。但是我害怕在那个目标框上,因为我不允许更改 apache 配置,我也不允许更改 server.xml。回复:协议标准Wikipedia 声明:“HTTP 1.1 规范 (IETF RFC 2616) 的过时版本需要一个完整的绝对 URI 进行重定向。[..] 大多数流行的 Web 浏览器允许传递相对 URL,因此,更新的 HTTP 1.1 规范 (IETF RFC 7231) [..] 允许在 Location 标头中使用相对 URL。”
    猜你喜欢
    • 2015-08-17
    • 2015-12-13
    • 1970-01-01
    • 2016-07-16
    • 1970-01-01
    • 2017-03-06
    • 2019-05-08
    • 2014-01-11
    • 2016-09-03
    相关资源
    最近更新 更多