I have a Spring web app, secured with Spring Security, running on EC2. In front of the EC2 instance is an Elastic Load Balancer with an SSL cert (https terminates at the load balancer ie. port 443 -> port 80), so from Tomcat's perspective, inbound requests are HTTP.
My login form submits to https, however the subsequent redirect goes to http (success or fail). The authentication was successful, and I can go back to https and I'm logged in.
My login configuration looks like so:
<security:form-login
default-target-url="/home"
login-page="/"
login-processing-url="/processlogin"
authentication-failure-url="/?login_error=1"/>
What do I need to change to make default-target-url and authentication-failure-url go to https?
- Tomcat 6
- Spring Security 3.0.x
I had the same problem with Spring Boot behind Google Kubernetes. Adding these two lines to application.properties did it for me
Source: https://docs.spring.io/spring-boot/docs/current/reference/html/howto-security.html#howto-enable-https
If it is a Spring Boot application (I use currently the 2.0.0 release), the following configuration within the
application.properties
file should be enough:This worked for me on AWS with an load balancer at the front.
For Spring Boot < 2.0.0 it should also work (not tested)
I set requires-channel="any" on all intercept-urls. This allows it to still work in my dev environment where I don't use SSL.
Then, create an apache virtual host that redirects all traffic to the HTTPS version.
One way I got this working is by adding the following config
Had to add
always-use-default-target="true"
anddefault-target-url="https://...."
. Not the ideal way as you need to hard code the url in the config.I am also facing exactly same problem and till the time I get proper solution I am redirecting my requests from proxy server to tomcat server over AJP instead of HTTP. Below is my apache configuration
Your spring configuration should be agnostic to the used protocol. If you use something like "requires-channel", you'll run into problems sooner or later, especially if you want to deploy the same application to a development environment without https.
Instead, consider to configure your tomcat properly. You can do this with RemoteIpValve. Depending on which headers the loadbalancer sends, your server.xml configuration needs to contain something like this:
Spring will determine the absolute redirect address based on the ServletRequest, so change the httpsServerPort if you are using something else than 443: