Bonjour,
J'ai réussi à avoir des services REST sécurisés en java en utilisant des filtres appelés pour chaque requête REST pour tester que l'utilisateur est bien authentifié (utilisation d'un jeton JWT signé) et qu'il a le droit d'accéder au service REST (filtrage en fonction de roles).
Dans mon web.xml j'ai seulement une servlet jersey définie comme ceci:
J'ai une page HTML/JS pour l'authentification (connexion.html) ainsi qu'une page HTML/JS pour le lancement des requêtes REST (home.html). Je voudrais les mettre (avec les .js associés) dans mon projet sous src/main/webapp/WEB-INF.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 <servlet> <servlet-name>jersey-serlvet</servlet-name> <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> <!-- Déclaration des filtres pour vérifier que l'utilisateur est bien authentifié (avec token) et qu'il est authorisé (avec Role) --> <init-param> <param-name>com.sun.jersey.spi.container.ContainerRequestFilters</param-name> <param-value> com.testAngularRestToken.filter.AuthenticationFilter com.testAngularRestToken.filter.AuthorizationFilter </param-value> </init-param> <!-- Déclaration des packages à gérer (ici les controlleurs qui traitent les requêtes REST ainsi que les filtres) --> <init-param> <param-name>jersey.config.server.provider.packages</param-name> <param-value>com.testAngularRestToken.restController;com.testAngularRestToken.filter</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>jersey-serlvet</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping>
Je voudrais maintenant que l'ensemble fonctionne ensemble comme ceci:
- L'utilisateur accède à http://localhost:8080/TestAngularRestToken -> Il arrive sur la page de connexion
- D'abord l'utilisateur doit se connecter -> A la validation, appel au service REST en POST /rest/authenticate qui retourne un jeton qui sera ensuite mis dans le header de chaque requête REST
- Une fois connecté, l'utilisateur est redirigé vers home.html (le jeton devra être connu ici pour les appels REST)
- Si l'utilisateur fait une requête REST et que le jeton n'est pas ou plus valide, alors on doit le rediriger vers la page de connexion
- Si l'utilisateur fait une requête REST sur un service pour lequels il n'a pas les droits, alors il reste sur la page home.html mais un message lui sera affiché
Je ne sais pas si je peux tout faire avec la servlet jersey ou bien s'il me faudrait par exemple une autre servlet personnelle.
Questions:
- Je n'arrive pas à faire que la page connexion.html soit affiché lors de l'appel à http://localhost:8080/TestAngularRestToken alors que j'ai défini ceci dans web.xml:
Comment faire pour que ca marche?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 <welcome-file-list> <welcome-file>WEB-INF/connexion.html</welcome-file> </welcome-file-list>
- Comment gérer les redirections dont j'ai besoin (redirection vers home.html une fois connecté, redirection vers la page de connexion si jeton pas ou plus valide...)?
- Comment avoir des retours sur les erreurs coté client (HTML/JS) car je n'ai qu'une page affichant ceci par exemple si le jeton n'existe pas ou n'est plus valide:
Je voudrais des messages plus explicite sur l'erreur pour pouvoir les afficher au client lors du retour de l'appel au service.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4type Rapport d''état message Unauthorized description La requête nécessite une authentification HTTP.
Merci d'avance de votre aide.
Partager