2009-11-19 3 views
2

Je travaille sur une application Web intranet uniquement (J2EE) qui nécessite certaines fonctions de sécurité de base. Il y aura relativement peu d'utilisateurs autorisés pour le site, mais j'ai encore besoin de mettre en place une sorte de session sécurisée.Recherche d'une conception de session simple et sécurisée avec des servlets et JSP

Le flux de base que je regarde est de visiter le site => se connecter => utiliser le site => se déconnecter lorsque vous avez terminé (ou se déconnecter automatiquement lorsque le navigateur est fermé). Rien d'extraordinaire, pas même une option "remember me" lors de la connexion. La plupart du travail pour l'authentification est déjà fait - le site est accessible uniquement sur https, et j'ai une base de données qui stocke les noms d'utilisateur et les mots de passe cryptés. Donc, une fois que l'utilisateur s'est connecté, quel est le plus simple (idéalement, pas de cookies au-delà de ce que JBoss/JSP ferait en coulisse) pour mettre en place une session sécurisée? C'EST À DIRE. Est-ce qu'il suffit de vérifier la session pour une valeur similaire à "isUserAuthenticated", en vérifiant que la session existe (par ex. request.getSession(false)) pour toutes les demandes entrantes dans mon servlet? Qu'en est-il d'empêcher les utilisateurs d'obtenir des fichiers JSP et de les forcer à utiliser une servlet pour toutes les demandes? D'autres considérations (et leurs solutions)?

+0

Pour la première partie, vous pouvez vérifier http: // stackoverflow.com/questions/348090/assurer-utilisateurs-sont-authentifiés-dans-java-web-app –

+0

C'est certainement le genre de chose que j'avais en tête. Pas que ce soit élégant (je devine que je vérifierais juste cette valeur à chaque demande de page), mais il semble très minime. –

+0

J'ai répondu à vos questions dans un commentaire - veuillez jeter un coup d'œil. Bien que ce soit évidemment votre choix sur la façon d'implémenter ceci, gardez à l'esprit que bien qu'il y ait une courbe d'apprentissage impliquée pour faire ceci "la bonne manière", c'est en fait plus facile et plus simple à la fin (nous parlons littéralement 15-20 lignes de XML, c'est tout). – ChssPly76

Répondre

6

On dirait que vous pouvez utiliser une approche de sécurité déclarative simple.

Jetez un oeil à Java EE section Tutoriel pour Securing Web Applications, en particulier à declarative security section

Pour répondre à vos questions spécifiques:

Quelle est la plus simple ... façon de mettre en œuvre une session sécurisée? C'EST À DIRE. empêcher les utilisateurs de seulement directement pages demandant au-delà de l'écran de connexion, etc.

Déclarez vos URL dans le descripteur webapp (web.xml) avec un rôle de sécurité approprié. Ils seront inaccessibles aux utilisateurs non autorisés (et tenter d'y accéder fera apparaître une page de connexion).

Est-il juste une question de vérifier la session pour certains « isUserAuthenticated » valeur -comme, vérifier que la session existe (par exemple request.getSession (false)) pour toutes les requêtes entrantes dans mon servlet ?

Tout cela sera complètement inutile; Le conteneur de servlet le fera pour vous dans les coulisses.

Qu'en est-il d'empêcher les utilisateurs de obtenir les fichiers JSP et les forçant à utiliser un servlet pour toutes les demandes?

Tant que jamais besoin d'JSPs sont accessibles au public (par exemple, vous transférez les à partir de votre servlet, vous n'êtes jamais rediriger à une JSP), vous pouvez déclarer leurs URL dans une collection avec la sécurité rôle qui n'est jamais réellement affecté à un utilisateur.

+0

+1 pour la bonne réponse et d'être plus rapide :) –

+0

J'ai regardé en utilisant le DD pour la sécurité avant, et il a semblé comme exagéré. Je n'ai vraiment pas plusieurs rôles de sécurité, ou quelque chose comme ça; juste des combinaisons nom d'utilisateur/mot de passe valides (ou invalides). Avec la sécurité déclarative, comment puis-je (en tant que programmeur Java) informer le serveur qu'un nom d'utilisateur/mot de passe particulier est ou n'est pas valide pour une tentative de connexion particulière? Le didacticiel indique également "Lors de la création d'une connexion basée sur un formulaire, veillez à gérer les sessions à l'aide de cookies ou d'informations de session SSL", ce que j'essaie d'éviter. –

+0

Vous n'avez pas besoin d'avoir plusieurs rôles, un seul suffit (deux si vous voulez restreindre les JSP). La façon dont vous déterminez si utilisateur/mot de passe est valide est spécifique au conteneur; pour Tomcat, vous pouvez le faire en spécifiant un domaine (http://tomcat.apache.org/tomcat-6.0-doc/realm-howto.html#JDBCRealm) ou en écrivant le vôtre. Je ne suis pas sûr de ce que vous entendez par "éviter les cookies" - la session doit être maintenue d'une manière ou d'une autre (le conteneur traite les cookies, pas vous). Si les cookies sont inacceptables, vous pouvez utiliser la réécriture d'URL (les détails sont dans le lien tutoriel) – ChssPly76

Questions connexes