Déconnexion de l'application web tomcat à l'aide de l'authentification de Base
Je suis tomcat à l'aide de l'authentification de base pour mon application web:
J'ai ajouté les lignes suivantes web.xml dans mon application web:
<security-constraint>
<web-resource-collection>
<web-resource-name>webpages</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>*</role-name>
</auth-constraint>
<user-data-constraint>
<!-- transport-guarantee can be CONFIDENTIAL, INTEGRAL, or NONE -->
<transport-guarantee>NONE</transport-guarantee>
</user-data-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
</login-config>
<security-role>
<role-name>*</role-name>
</security-role>
Mon lien de déconnexion:
<h:commandLink value="Logout" action="#{userBean.logout}" />
Mon lien de déconnexion de l'action:
public void logout() throws IOException
{
FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
FacesContext.getCurrentInstance().getExternalContext().redirect("add_international_job.faces");
}
Maintenant lors de la déconnexion est appelé, il redirige vers une autre page qui devrait exiger l'authentification. Mais c'est rendu que l'utilisateur est connecté. PS: lorsque l'utilisateur première fois tape l'url de la même page dans la barre d'adresse, il est présenté avec l'authentification(c'est à dire qu'il n'y a pas de problème dans cette page protégé par mot de passe).
OriginalL'auteur | 2012-05-28
Vous devez vous connecter pour publier un commentaire.
Vous êtes à l'aide de HTTP
BASIC
l'authentification au lieu de HTTPFORM
authentification avecj_security_check
. LeBASIC
l'authentification se fait parAuthorization
en-tête de requête à partir du navigateur de côté, ce qui est de la session indépendant.À la force d'une "déconnexion" sur
BASIC
l'authentification, le serveur doit essentiellement à retourner une réponse 401.Cette présentera une erreur HTTP 401 page qui est personnalisable comme
<error-page>
dansweb.xml
.La place, vous pouvez également renvoyer une page HTML avec meta refresh, de sorte que l'utilisateur est redirigé vers la cible souhaitée page, comme spécifié dans le meta refresh en-tête de contenu.
Cela semble en effet assez bas niveau et hacky, mais le
BASIC
l'authentification est également assez bas niveau. Ce n'est pas nécessaire lors de l'utilisation deFORM
d'authentification. Juste invalider la session et à l'envoi d'une normale redirection devrait travailler pourFORM
d'authentification.Cela ne semble fonctionner sur Chrome, et pas FireFox ou IE.
ceci est indépendant du navigateur. Concrètement, votre problème est probablement causé dans le côté client. Peut-être cache du navigateur?
Que penser de l'utilisation du bouton "retour" après la 401 ?
OriginalL'auteur BalusC
C'est quelque chose de complètement différent. Vous utilisez l'authentification de BASE pour valider un utilisateur. Cette demande le navigateur pour un nom d'utilisateur et mot de passe sur la première demande. À partir de là, le navigateur va automatiquement envoyer le nom d'utilisateur et mot de passe sur toutes les demandes ultérieures sur le même serveur, de sorte que votre site web d'authentification basée sur juste relogs. La session EST annulée, et tout ce que vous placez dans il sera parti, mais vous ne pouvez pas obtenir le serveur de reprompt à l'utilisateur un nom et un mot de passe. Il va continuer à envoyer le même nom d'utilisateur et mot de passe pour le même hôte jusqu'à ce que vous fermez le navigateur. C'est un inconvénient pour l'authentification de BASE.
En général, je utiliser mon propre authentification, car il permet plus de liberté, cependant, vous êtes responsable de veiller à ce que les ressources soient protégés. Un moyen facile de faire cela est d'utiliser des Entretoises et remplacer l'action des servlets effectuer de méthode d'authentification. Vous créez votre propre page de connexion au lieu d'avoir le navigateur de mettre en place une boîte de dialogue de connexion. Vous assurez-vous que quelqu'un est connecté par l'enregistrement d'une variable de session, et en vérifiant que var lorsqu'ils font des demandes. Si le var est, ils sont ok. Si non, vous rediriger vers la page de connexion. invalider les fichiers journaux de session quelqu'un.
OriginalL'auteur Chaminda Bandara
logout()
méthode a cependant fonctionne très bien pour l'authentification basée sur des formulaires parj_security_check
ou des programmes d'authentification parlogin()
.OriginalL'auteur Davide Consonni