2013-03-04 3 views
4

J'ai une application Web Java EE 6 fonctionnant sur JBoss 7.1.1 dont certaines pages nécessitent une authentification et d'autres non. Pour les pages authentifiées, j'utilise Servlet 3.0 Programmatic Security comme décrit dans this previous post.Java EE 6 sécurité et redirection

Dans mon web.xml, je l'entrée suivante

<login-config> 
    <auth-method>FORM</auth-method> 
    <form-login-config> 
    <form-login-page>/login</form-login-page> 
    <form-error-page>/loginError</form-error-page> 
    </form-login-config> 
</login-config> 

et dans ma classe de connexion, j'ai une méthode annotée avec @PostConstruct où la page demandée est capturée: String previousURL = (String) FacesContext.getCurrentInstance().getExternalContext().getRequestMap().get(RequestDispatcher.FORWARD_QUERY_STRING)

Cependant, il évalue la page/login elle-même plutôt que la page demandée par l'utilisateur et était puis transmis par JBoss en raison des paramètres de configuration de connexion dans le fichier web.xml. Par conséquent, lorsque je redirige vers previousURL, cela me ramène simplement à la page de connexion, plutôt qu'à la page sur laquelle l'utilisateur a cliqué initialement. Qu'est-ce que je fais mal?

Répondre

1

Vous essayez de récupérer le mauvais attribut. Ce que vous êtes censé essayer de récupérer est le RequestDispatcher.FORWARD_REQUEST_URI qui est un URI réel. Qu'est-ce que vous essayez actuellement de récupérer est la chaîne de requête (essentiellement tout ce qui après l'URL réelle, le ?param=1 etc) suivant l'URL demandée

+0

Merci d'avoir attrapé cela. Après l'avoir changé, j'obtiens toujours previousURL sur la page/login plutôt que sur la page demandée initialement. – Anand

+0

Et vous êtes positif @Anand que les informations d'identification fournies par l'utilisateur sont authentifiées avec succès? – kolossus

+0

Je le pense. Voici l'entrée du journal de JBoss: 'Excuting query: sélectionnez le mot de passe de PRINCIPAL où username =?, Avec le nom d'utilisateur: admin ... Utilisateur 'admin' authentifié, loginOk = true commit, loginOk = true ... Affecter un utilisateur au rôle Administration ... Utilisateur: admin est authentifié' – Anand