2008-12-07 7 views
1

Mon application Web dispose d'une zone sécurisée à laquelle les utilisateurs se connectent via une page JSP. La JSP envoie le nom d'utilisateur et le mot de passe à une servlet, qui vérifie ensuite si les informations d'identification des utilisateurs sont valides. Si elles sont valides, l'utilisateur est dirigé vers la ressource sécurisée. Comment puis-je m'assurer que les utilisateurs ne peuvent pas simplement accéder à la ressource sécurisée sans valider d'abord?Vérification de l'authentification des utilisateurs dans Java Web App

+0

Je suppose que l'authentification déclarative n'est pas une option pour l'application (authentification gérée par conteneur via le descripteur de déploiement). – McDowell

Répondre

6

Une approche commune est de mettre un jeton dans la session de l'utilisateur à savoir

session.setAttribute("loggedIn", "true");

ou même

session.setAttribute("loggedInUser", "someUserName");

et vérifiez que sur une page qui devrait être fixé. Une bonne stratégie consiste à effectuer la vérification à l'aide d'un filtre de servlet que vous attachez à une page à sécuriser. Si elles ne réussissent pas la vérification, le filtre peut rediriger vers la page de connexion. Voir aussi ici: http://java.sun.com/products/servlet/Filters.html

Ceci est un bon article sur l'utilisation de filtres pour l'authentification aussi: http://www.developer.com/java/ent/article.php/3467801

+0

Pourquoi cette approche serait-elle meilleure que l'authentification gérée par conteneur? – erickson

+0

Cela dépend de vos besoins. Pour une application simple, c'est plus facile, mais cma est une bonne solution robuste pour des besoins plus avancés. Comme toujours, votre kilométrage peut varier. – mtruesdell

+0

Je préférerais quelque chose comme, session.setAttribute ("user", userBean); Bien sûr, sans informations sensibles. –

0

Assurez-vous sûr que les gens ont toujours accès à votre application par un seul servlet, où le servlet dispataches la demande à une page JSP, et retourne la réponse résultante au navigateur. De cette façon, vous serez toujours en contrôle de ce qui se passe parce qu'il y a un seul point d'entrée.

Une approche différente consiste à avoir une variable de session (côté serveur, ou même dans un cookie) qui est vérifiée par chaque JSP qui nécessite une authentification.

4

Quel combat en utilisant la sécurité dans votre web.xml contraint:

<security-constraint> 
     <web-resource-collection> 
     <web-resource-name>Secure</web-resource-name> 
     <url-pattern>/secure/*</url-pattern> 
     </web-resource-collection> 
+0

Voir, par exemple, cette question: http://stackoverflow.com/questions/344474/form-authentication-on-website –

0

La sécurité est vraiment difficile d'obtenir le droit. Beaucoup plus que vous ne le pensez habituellement. L'utilisation d'un cadre (Acegi vient à l'esprit), ou la section standard "" de web.xml comme LenW pointed out est un must! Au moins, utilisez un filtre pour gérer la partie autorisation de votre sécurité.

Je n'aime pas vraiment la solution d'utiliser un seul point d'entrée (comme suggested by Rolf). Cela me semble une contrainte artificielle mise sur votre architecture. Et il y a beaucoup de bonnes raisons d'avoir plusieurs servlets dans une application Web. Quoi que vous fassiez, n'utilisez pas une technique où vous vous fiez au code manuel sur chaque page (par exemple: chaque JSP commençant par "if user_authentified ..."). Vous oublierez de le mettre quelque part ...

Questions connexes