2010-06-28 5 views
4

Je développe une application web. J'aimerais pouvoir laisser certains amis le voir, mais pas d'autres qui trébuchent sur l'url. J'allais mettre une page d'atterrissage, puis une boîte de mot de passe simple. Une fois le bon mot de passe entré, je l'enregistre simplement dans la session et expose le site comme d'habitude pour le reste du temps, il garde le navigateur ouvert.Restreindre l'accès JSP/Servlet à des utilisateurs spécifiques uniquement

Existe-t-il un moyen standard de le faire? J'ajouterais du code supplémentaire à ma webapp pour soutenir ceci, je ne suis pas sûr s'il y a une manière intégrée de le faire déjà (j'utilise des servlets de Java).

Merci

Répondre

5

Vous pouvez utiliser container managed authentication using deployment descriptors. Cela ne nécessite pas de code supplémentaire de votre côté attendre d'un formulaire de connexion simple avec un champ d'entrée et mot de passe qui soumet à l'adresse URL j_security_check. Voici un exemple de base:

<form action="j_security_check" method="post"> 
    <input type="text" name="j_username"> 
    <input type="password" name="j_password"> 
    <input type="submit"> 
</form> 

En supposant que vous avez des pages privées dans un dossier nommé /private et la page de connexion ci-dessus se trouve dans /private/login.jsp, puis ajoutez les entrées suivantes à web.xml de la webapp:

<security-constraint> 
    <web-resource-collection> 
     <web-resource-name>Private</web-resource-name> 
     <url-pattern>/private/*</url-pattern> 
    </web-resource-collection> 
    <auth-constraint> 
     <role-name>friends</role-name> 
    </auth-constraint> 
</security-constraint> 

<login-config> 
    <auth-method>FORM</auth-method> 
    <realm-name>Private</realm-name> 
    <form-login-config> 
     <form-login-page>/private/login.jsp</form-login-page> 
     <form-error-page>/private/error.jsp</form-error-page> 
    </form-login-config> 
</login-config> 

Ensuite, dans le conteneur de servlet que vous utilisez, vous devez configurer ce que l'on appelle un Realm pour Private. Comme on ne sait pas quel servletcontainer vous utilisez, voici un document ciblé Tomcat 8.0: Realm Configuration HOW-TO. Vous pouvez le configurer pour vérifier le combo nom d'utilisateur/mot de passe sur un fichier XML ou une base de données ou même un emplacement personnalisé.


Une alternative est complètement différent de homegrow un mécanisme de connexion à l'aide d'un Filter qui vérifie la présence de l'utilisateur connecté à la portée de session. Voir this et this répondre comment y parvenir.

Questions connexes