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
Partager