Tho*_*ody 41 ssl https spring spring-security tomcat6
我有一个Spring网络应用程序,使用Spring Security保护,在EC2上运行.在EC2实例前面是一个带有SSL证书的Elastic Load Balancer(https终止于负载均衡器,即端口443 - >端口80),因此从Tomcat的角度来看,入站请求是HTTP.
我的登录表单提交到https,但后续重定向转到http(成功或失败).身份验证成功,我可以回到https,我已登录.
我的登录配置如下:
<security:form-login
default-target-url="/home"
login-page="/"
login-processing-url="/processlogin"
authentication-failure-url="/?login_error=1"/>
Run Code Online (Sandbox Code Playgroud)
我需要更改什么来使default-target-url和authentication-failure-url转到https?
mar*_*elj 23
您的弹簧配置应与所使用的协议无关.如果使用"需要通道"之类的东西,迟早会遇到问题,特别是如果要将相同的应用程序部署到没有https的开发环境中.
相反,请考虑正确配置您的tomcat.您可以使用RemoteIpValve执行此操作.根据负载均衡器发送的头,您的server.xml配置需要包含以下内容:
<Valve
className="org.apache.catalina.valves.RemoteIpValve"
internalProxies=".*"
protocolHeader="X-Forwarded-Proto"
httpsServerPort="443"
/>
Run Code Online (Sandbox Code Playgroud)
Spring将根据ServletRequest确定绝对重定向地址,因此如果您使用的是443以外的其他内容,请更改httpsServerPort:
当protocolHeader指示https协议时,httpsServerPort是ServletRequest.getServerPort()返回的端口
Rol*_*015 11
如果它是一个Spring Boot应用程序(我目前使用的是2.0.0版本),则application.properties文件中的以下配置就足够了:
server.tomcat.protocol-header=x-forwarded-proto
Run Code Online (Sandbox Code Playgroud)
这对我在AWS上非常有用,前端有一个负载均衡器。
对于Spring Boot <2.0.0,它也应该工作(未经测试)
小智 5
我在 Google Kubernetes 背后的 Spring Boot 也遇到了同样的问题。将这两行添加到 application.properties 对我来说是这样的
server.tomcat.remote-ip-header=x-forwarded-for
server.tomcat.protocol-header=x-forwarded-proto
Run Code Online (Sandbox Code Playgroud)
小智 2
我实现此功能的一种方法是添加以下配置
<http auto-config="true" use-expressions="true" entry-point-ref="authenticationEntryPoint" >
<form-login login-page="/login.jsf" authentication-failure-url="/login.jsf?login_error=t" always-use-default-target="true" default-target-url="xxxxx" />
<logout logout-url="/logout" logout-success-url="/logoutSuccess.jsf" />
...
</http>
Run Code Online (Sandbox Code Playgroud)
必须添加always-use-default-target="true"和default-target-url="https://...."。这不是理想的方法,因为您需要在配置中对 url 进行硬编码。
| 归档时间: |
|
| 查看次数: |
28285 次 |
| 最近记录: |