Bonjour,
Pourriez vous m'indiquer une façon simple de sécuriser (c'est à dire restreindre l'accès à un groupe de personnes) mes servlets http ?
Celles - ci sont invoquées par un client Java Swing.
Bonjour,
Pourriez vous m'indiquer une façon simple de sécuriser (c'est à dire restreindre l'accès à un groupe de personnes) mes servlets http ?
Celles - ci sont invoquées par un client Java Swing.
Ce que je fais est dériver toutes mes servlets d'une classe main...
Je t'ai simplifié ça au plus haut point!
Ex:
Puis finalement, la servlet Login:
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
27
28
29
30
31
32 public class MaServlet extends Main { public void execute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //ton code } } et... abstract public class Main extends HttpServlet { final protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { verifierConnexion(request, response); } final protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { verifierConnexion(request, response); } private void verifierConnexion(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getSession(false); if (session != null) { execute(request, response); } else { // Dans aucune session... RequestDispatcher dispatcher = request.getRequestDispatcher("./Login"); dispatcher.forward(request, response); } } abstract void execute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 public class Login extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //Ton code de validation dans ta BD ou autre... si autorisé { HttpSession session = request.getSession(); } etc... } }
Ainsi, peu importe la servlet appelée, c'est d'abord la classe parent Main qui sera chargée... Si l'usager n'est pas enregistré, il est redirigé vers /Login...
Et là, tu peux t'amuser... Avoir des backdoors à certaines servlets ne nécessitant pas de sécurité. Il est bien également de sauver la servlet demandée, ainsi que ses params... pour qu'après le login, l'usager soit automatiquement redirigé vers la bonne page.
Il y a surement une façon plus simple de gérer le tout avec les fichiers de configs de tomcat/apache... mais bon, je suis habitué de tout faire à bras!
Bonne journée!
Heu... Pourquoi reinventer la roue à chaque fois ?
Plusieurs solutions existent déjà :
- passer par un filtre : c'est le filtre qui redirige vers le servlet de login si le mec n'est pas encore authentifié, et en passant, il lui donne le contexte vers lequel rediriger l'user s'il a réussi à ce logger (c'est l'URL demandé initialement en fait)
- exploiter tout simplement les possibilités offertes par le fichier web.xml. Là, en plus, tu as le choix pour le stockage de tes login/mot de passe, de la façon de se logger (form, popup, ...) : http://quark.humbug.org.au/publicati.../msg00027.html
c'est quoi cette histoire de vérifier dans le code du servlet? On est dans un spécification j2ee là, qui précise comment configurer les droit d'accès d'une webapp, donc +1 pour utiliser les security-constraint du web.xml. Si tu trouve le shéma J2EE trop contraignant (par exemple il ne permet pas de login délibéré, c'est uniquement si le serveur exige du client un login qu'un login sera accepté), tu peux t'orienté vers le security filter, disponible sur sourceforge, et qui travaille avec une config similaire mais plus souple.
OK, merci pour ces pistes.
J'aimerais par ailleurs savoir comment construire la requête http d'authentification au niveau de mon client Java (je ne sais pas si je suis très clair). Pour l'instant, je fais appel à mes servlets de la la manière suivante :
(dans le cas d'une requête GET)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 url = new URL("http://" + getHost() + ":" + getPort() +"/" + tabUrl[13] + "idPhoto=" + id); HttpURLConnection cnx = (HttpURLConnection) url.openConnection(); cnx.setRequestMethod("GET"); // reception des données texte de la servlet BufferedReader in = new BufferedReader(new InputStreamReader( cnx.getInputStream())); String reception = in.readLine(); in.close();
(dans le cas d'une requête POST où j'envoie un objet)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 cnx.setRequestMethod("POST"); cnx.setDoOutput(true); ObjectOutputStream out = new ObjectOutputStream(cnx.getOutputStream()); out.writeObject(p);
Dans la solution proposée précédemment, j'aurais besoin de spécifier les utilisateurs autorisés dans le fichier web.xml grâce à un couple login / mot de passe. Au niveau du client il me faudrait donc envoyer ces informations d'authentification lors de l'appel à une servlet. Donc comment faire ?
D'autre part, n'y a t-il pas de problèmes de sécurité avec cette solution ?
Les informations ne semblent pas être cryptées.
Enfin que pensez vous de l'utilisation de SSL et des certificats ?
Merci
Quand tu passe par les security constraint, ou par le securit filter, l'avantage est juste que tu ne dois pas gérer les login/mot de passes des user, le conteneur le fait pour toi. Toi t'as juste à définir les groupe dans lesquels les users doivent être présent pour accéder à telle ou telle ressource. La gestion des users est déléguée au conteneur.
A ta place, je ne referais pas tout : jettes un coup d'oeil à la librairie HttpClient (sur Jakarta Apache), tu as déjà tout là-dedans pour gérer une connexion avec authentification préalable.
Après, côté serveur, comme on te l'a proposé, utilise les fonctionnalités security-constraint
Là, il faut crypter les données envoyées avec du SSLD'autre part, n'y a t-il pas de problèmes de sécurité avec cette solution ?
Les informations ne semblent pas être cryptées.
Oui, c'est la bonne solutionEnfin que pensez vous de l'utilisation de SSL et des certificats ?
Merci
Et là, c'est pareil, exploite les possibilités offertes par ton conteneur Web : activer le connecteur SSL de Tomcat
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager