Problème de forward sur servlet Java/JSP
Bonjour à tous !
Mon appli doit vérifier si l'utilisateur fait partie d'un groupe AD pour autoriser son accès.
Lorsque l'on arrive sur mon index.jsp, si on a pas fait la vérif on est redirigé vers le servlet GroupeUtilisateur.
Ce servlet va regarder la session connectée pour en sortir l'utilisateur, puis retourner l'info sur index.jsp.
Ca fonctionne bien uniquement s'il plante une première fois .....
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| <body>
<div class ="err"> <c:out value="${sessionScope.message}"/> </div> <!-- Affichage des messages d'erreur en cas de problème de mise à jour de BDD -->
<c:set var = "auth" scope = "session" value = "${sessionScope.autorisation}"/> <!-- Récupération de l'autorisation pour la session -->
<!--
<div class ="err"> Log Autorisation : [<c:out value = "${auth}"/>] </div>
<div class ="err"> Log Autorisation sans var : [<c:out value = "${sessionScope.autorisation}"/>] </div>
-->
<!-- si la valeur auth est vide c'est que l'on a accédé à la page avant d'être passé par le servlet de contrôle AD GroupeUtilisateur, on renvoi dessus -->
<c:choose>
<c:when test = "${empty auth}">
<div class ="err"> Pas d'autorisation on redirige <c:out value="${sessionScope.autorisation}"/> </div>
<script language="javascript"> document.location.href="./GroupeUtilisateur/" </script>
</c:when>
<c:when test = "${!fn:contains(auth, 'Thanact-Admin') && !fn:contains(auth, 'Thanact-User')}">
<div class ="err">Vous n'êtes pas habilité à utiliser cet écran. <br/> Vous pouvez en faire la demande en envoyant un message à <a href="mailto:dsi-dev">dsi-dev</a> - [<c:out value = "${auth}" />]</div>
<br/>
<input type="button" name="back" value="Retour" onClick="parent.location='/Thanact/index.jsp'" class="buttonGrey">
</c:when> |
Ensuite voici mon GroupeUtilisateur:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| public class GroupeUtilisateur extends HttpServlet{
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException
{
response.setContentType("text/html");
PrintWriter out = response.getWriter();
Connection connBDUtil = null;
String autorise = "";
autorise = CheckAuth.isAllowed(request, response, "IML-Thanact-Admin;IML-Thanact-User", "REFERENT", "Application de contrôle des accès au DPI");
if(autorise.contains("IML-Thanact-Admin") || autorise.contains("IML-Thanact-User"))
{
HttpSession session = request.getSession();
/* Mise en session d'une chaîne de caractères */
session.setAttribute( "autorisation", autorise );
String nextJSP = "/index.jsp";
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(nextJSP);
dispatcher.forward(request,response);
}
}
} |
Et le noeud du problème vient je pense de la méthode CheckAuth.isAllowed
C'est un bout de programme commun à plusieurs appli, je ne l'ai pas écrit.
Il va regarder dans le auth quel est le nom du user.
Le problème c'est que la première fois il est 'null' et qu'il le set. Je pense que c'est cette passe qui pose problème mais je ne vois pas comment l'éviter:
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| String auth = request.getHeader("Authorization");
if (auth == null)
{
response.setStatus(response.SC_UNAUTHORIZED);
response.setHeader("WWW-Authenticate", "NTLM");
response.flushBuffer();
return "KO" ;
}
if (auth.startsWith("NTLM "))
{//verif accès} |
Si je regarde mes traces avec un print de auth je le vois une fois à null puis une seconde fois avec NTMxxxxxxx.
Je ne sais même pas à quel moment il le rappelle ...
J'espère que vous pourrez me décoincer, je patine depuis plusieurs jours/semaine !
Merci :)