I have my application on a test server being executed exclusively over https. When I navigate without redirecting, it works perfectly:
Example:
Another solution is to set
RequestHeader set X-Forwarded-Proto https RequestHeader set X-Forwarded-Port 443
on the VirtualHost in Apache.
JSF will then know that the redirect should be to a HTTPS connection and no code changes are required.
I have used this with Apache and Wildfly.