HTTPS connexion avec le Printemps, la Sécurité des redirections HTTP
J'ai un Printemps application web, sécurisé, avec Ressort de Sécurité, en cours d'exécution sur EC2. En face de l'instance EC2 est un Elastic Load Balancer avec un certificat SSL (https termine à l'équilibrage de la charge de ie. le port 443 -> le port 80), donc à partir de Tomcat point de vue, les demandes entrantes sont HTTP.
Mon formulaire de connexion se soumet à https, cependant ultérieures de redirection va à http (succès ou échec). L'authentification a réussi, et je peux retourner à l'https et je suis connecté.
Mon login configuration ressemble à ceci:
<security:form-login
default-target-url="/home"
login-page="/"
login-processing-url="/processlogin"
authentication-failure-url="/?login_error=1"/>
Que dois-je faire des changements par défaut-à la cible de l'url et de l'authentification-échec-l'url https?
- Tomcat 6
- Spring Security 3.0.x
- J'ai configuré une réécriture Apache dans le temps de le dire, mais toujours curieux de savoir si il y a un moyen de le faire avec l'intérieur de la Sécurité Printemps config.
- généralement, il est fait à équilibrage de charge et la configuration est appelée url-rewrite. De cette façon, équilibrage de charge permet de s'assurer que rediriger les séjours à l'adresse https.
Vous devez vous connecter pour publier un commentaire.
Votre configuration spring doit être agnostique pour le protocole utilisé. Si vous utilisez quelque chose comme "exige-canal", vous pourrez rencontrer des problèmes tôt ou tard, surtout si vous souhaitez déployer la même demande à un environnement de développement sans https.
Au lieu de cela, pensez à configurer votre serveur tomcat correctement. Vous pouvez faire cela avec RemoteIpValve. Selon les en-têtes de la loadbalancer envoie, votre server.xml configuration doit contenir quelque chose comme ceci:
Printemps va déterminer l'absolu adresse de redirection basée sur la ServletRequest, donc changer le httpsServerPort si vous utilisez autre chose que 443:
Si c'est un Ressort de Démarrage de l'application (j'utilise actuellement la version 2.0.0), la configuration suivante dans le
application.properties
fichier devrait être suffisant:Cela a fonctionné pour moi sur AWS avec un équilibreur de charge à l'avant.
Pour le Printemps Boot < 2.0.0 il convient également de travailler (pas testé)
server.use-forward-headers=true
docs.printemps.io/spring-boot/docs/current/reference/html/...Une façon que j'ai obtenu ce travail est d'ajouter la configuration suivante
Dû ajouter
always-use-default-target="true"
etdefault-target-url="https://...."
. Pas la meilleure manière que vous avez besoin de coder en dur l'adresse url dans le fichier config.Je jeu nécessite-channel="tout" sur tous les intercepter-url. Cela lui permet de toujours travailler dans mon environnement de dev où je n'utilise pas SSL.
Ensuite, créer un hôte virtuel apache redirige tout le trafic vers la version HTTPS.
Je suis également confronté exactement le même problème et jusqu'à la fois que j'ai la bonne solution, je suis rediriger mes demandes de serveur proxy pour le serveur tomcat sur AJP au lieu de HTTP.
Voici ma configuration d'apache
utiliser en dessous de lignes de code dans web.xml
il rend forcé d'utiliser le protocole HTTPS.
J'ai eu le même problème avec Spring Boot derrière Google Kubernetes. L'ajout de ces deux lignes à la demande.propriétés l'a fait pour moi
Source: https://docs.spring.io/spring-boot/docs/current/reference/html/howto-security.html#howto-enable-https
Dans mon cas, j'ai dû ENLEVER la propriété
server.use-forward-headers=true
.C'est ma configuration:
Numérique de l'Océan LB --> Kubernetes cluster avec Pénétration --> le Printemps de démarrage de l'Application