Bonsoir,
comment procéder à une authentification de 2 manières :
- par une page login
- authentification direct en passant en paramètre le login et mot de passe en url(sans page login)
Merci d'avance.
Bonsoir,
comment procéder à une authentification de 2 manières :
- par une page login
- authentification direct en passant en paramètre le login et mot de passe en url(sans page login)
Merci d'avance.
Bonjour,
La première question est trop complexe pour être abordée dans un forum. Il faut chercher un peu, lire des tutos par exemple. Plus généralement la sécurité n'est pas un sujet simple à prendre à la légère. Tout est très bien expliqué dans la doc de spring-security.
Et vu votre deuxième question je vous conseille vraiment de la lire.
Dans les grandes lignes :
une des manières de faire pour supporter les 2 méthodes de login est de subclasser
org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter
et de placer cette classe comme custom filter dans la configuration http de spring-security:
en la plaçant avant le FORM_LOGIN_FILTER vous aurez la possibilité d'authentifier l'utilisateur à votre manière
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 <security:http ... > <security:custom-filter before="FORM_LOGIN_FILTER" ref="restLoginFilter" /> ... </security:http> <bean id="restLoginFilter" class="YourSubClassOfUsernamePasswordAuthenticationFilter"> ... </bean>
dans l'override de la méthode attemptAuthentication()
Vous devez créer un UsernamePasswordAuthenticationToken et le passer à l'authentication manager :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException
Ne vous préoccupez de valider le login/password dans votre code : l'authentication manager s'en occupe,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 return this.getAuthenticationManager().authenticate(myAuthToken);
vous devez juste remplir le UsernamePasswordAuthenticationToken, même avec des valeurs vides si les paramètres manquent…
Si l'authentication réussit, la page de login sera skippée sinon on continue comme d'habitude… le FORM_LOGIN_FILTER reprend la main.
Cela pour un GET, mais pour que le POST du form login continue à fonctionner vous devez tester si la méthode est un POST
et dans ce cas juste appeler
Si vous voulez des URLs success/failure différentes dans le cas de GET et de POST, vous devez les mettre en place à chaque requête avec setAuthenticationSuccessHandler et setAuthenticationFailureHandler.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 return super.attemptAuthentication(request, response) ;
Partager