我们有一个Spring Boot (Spring MVC)应用程序,在Apache SSL代理后面的专用应用程序服务器上嵌入了Tomcat。
代理服务器上的SSL端口是4433,转发到应用程序服务器上的端口8080。
因此,指向代理服务器的URL转发方式如下:
https://proxyserver:4433/appname >>forward>> http://appserver:8080/
在没有代理的情况下运行时,发生的第一件事是
Spring Security重定向请求,如下所示:
http://appserver:8080/ >>redirect>> http://appserver:8080/login
要显示登录表单,请将WebSecurityConfigurerAdapter
扩展为
...
httpSecurity.formLogin().loginPage("/login") ...
...
它在没有代理的情况下工作得很好,但是有了代理,重定向需要改变,
因此Spring应该重定向到相应的代理URL,如下所示:
http://appserver:8080/ >>redirect>> https://proxyserver:4433/appname/login
但目前还没有成功。
我正在尝试应用这个解决方案:59.8 Use Tomcat behind a front-end proxy server
我们已经在Apache中配置了,并验证它是否发送了预期的报头:
X-Forwarded-For: xxx.xxx.xxx.xxx
X-Forwarded-Host: proxyserver
X-Forwarded-Port: 4433
X-Forwarded-Proto: https
使用以下参数启动应用程序:
export ARG1='-Dserver.tomcat.protocol-header=x-forwarded-proto'
export ARG2='-Dserver.tomcat.remote-ip-header=x-forwarded-for'
java $ARG1 $ARG2 -jar webapp.jar
但是,重定向仍然不起作用。
它将一直在本地重定向到客户端不可用的http://appserver:8080/login
。
为了让这个场景工作,我们还需要做什么吗?
更新
此外,我还关心代理URL中的"/appname“部分。在应用程序服务器上,应用程序的根目录为"/“。在通过代理时,应该如何指示Spring将"/appname“包含在发送回客户端的所有URL中?
https://stackoverflow.com/questions/25455969
复制相似问题