IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JSF Java Discussion :

Problème LoginFilter sur /j_security_check avec JSF


Sujet :

JSF Java

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2002
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 16
    Points : 11
    Points
    11
    Par défaut Problème LoginFilter sur /j_security_check avec JSF
    Bonjour,

    J'ai des difficultés à comprendre pourquoi mon javax.servlet.Filter ne fonctionne pas sur l'authentification.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <!--  FILTER AUTHENTIFCATION -->
      <filter>
      <display-name>Login Filter</display-name>
      <filter-name>LoginFilter</filter-name>
      <filter-class>sessionUser.LoginFilter</filter-class>
     </filter>
    <filter-mapping>
    	<filter-name>LoginFilter</filter-name>
    	    <url-pattern>/j_security_check</url-pattern>
    </filter-mapping>
    Je rentre bien dans la méthode "init" de mon Filtrer au lancement de l'application, mais jamais par la méthode "doFilter".

    Est ce quelqu'un voit le souci de configuration ?

    Pour que je passe par cette méthode il faut que tape "http://localhost:8080/monappli/j_security_check"

    J'ai la configuration suivante et j'utilise JSF :

    Dans mon web.xml :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
     
     
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
      <display-name>monappli</display-name>
      <welcome-file-list>
        <welcome-file>/index.jsp</welcome-file>
      </welcome-file-list>
     
      <!-- FACES JSF -->
      <context-param>
        <param-name>javax.faces.CONFIG_FILES</param-name>
        <param-value>/WEB-INF/faces-config.xml</param-value>
      </context-param>
      <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
      </servlet>
      <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>/faces/*</url-pattern>
      </servlet-mapping>
      
      <!-- SECURITY AUTHORISATION -->
      <security-constraint>
        <web-resource-collection>
          <web-resource-name>monappli Manager</web-resource-name>
          <url-pattern>/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
          <role-name>admin</role-name>
        </auth-constraint>
      </security-constraint>
      <security-constraint>
        <web-resource-collection>
          <web-resource-name>Unsecured resources</web-resource-name>
          <url-pattern>/template/*</url-pattern>
        </web-resource-collection>
      </security-constraint>
        <!-- AUTHENTIFICATION -->
      <login-config>
        <auth-method>FORM</auth-method>
        <realm-name>monappliRealm</realm-name>
        <form-login-config>
          <form-login-page>/login.jsp</form-login-page>
          <form-error-page>/login_error.jsp</form-error-page>
        </form-login-config>
      </login-config>
      <security-role>
        <role-name>admin</role-name>
      </security-role>
     
    <!--  FILTER AUTHENTIFCATION -->
      <filter>
      <display-name>Login Filter</display-name>
      <filter-name>LoginFilter</filter-name>
      <filter-class>sessionUser.LoginFilter</filter-class>
     </filter>
    <filter-mapping>
    	<filter-name>LoginFilter</filter-name>
    	    <url-pattern>/j_security_check</url-pattern>
    </filter-mapping> 
     
    </web-app>
    Mon Filter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    package sessionUser;
     
    import java.io.IOException;
     
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.http.HttpServletRequest;
     
    public class LoginFilter implements Filter {
     
    	private FilterConfig filterConfig = null;
     
    	  public void doFilter(ServletRequest request, ServletResponse response,
    	    FilterChain chain)
    	    throws IOException, ServletException 
    	  {
     
    	    long start = System.currentTimeMillis();
    	    String address =  request.getRemoteAddr();
    	    String file = ((HttpServletRequest) request).getRequestURI();
     
    	    chain.doFilter(request, response);
     
    	    filterConfig.getServletContext().log(
    	        "User access! " +      
    	        " User IP: " + address +      
    	        " Resource: " + file + 
    	        " Milliseconds used: " + (System.currentTimeMillis() - start) 
    	    );
    	  }
     
    	  public void destroy() { }
     
    	  public void init(FilterConfig filterConfig) {
    	    this.filterConfig = filterConfig;
    	  }
     
     
     
    }

    Ma page login :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ...
    <form method="post" action="j_security_check" >
    Nom d'utilisateur : <input type="text" name="j_username" />
    <br />
    Mot de passe : <input type="password" name="j_password" />
    <br /><br /><br />
    <input type="submit" value="Connexion"/>
    </form></div>
    ....

  2. #2
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Points : 5 059
    Points
    5 059
    Par défaut
    qu'est ce qui se passe quand tu lance la page login.jsf?

  3. #3
    Membre à l'essai
    Inscrit en
    Décembre 2002
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 16
    Points : 11
    Points
    11
    Par défaut
    Merci pour ta réponse.

    Lorsque je lance

    http://localhost:8080/monappli/login.jsf

    J'ai une erreur 404

    C'est dû je pense au fait que JSF est configuré comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>/faces/*</url-pattern>
      </servlet-mapping>
    Par contre si je fait : http://localhost:8080/monappli/login.jsp

    Je passe bien par mon doFilter mais il va ensuite sur http://localhost:8080/monappli/j_security_check et me retourne une erreur 404.

  4. #4
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Points : 5 059
    Points
    5 059
    Par défaut
    dans le filtre donne lien de ta page JSF pas jsp, /faces/login.jsp..tu peux le tester avant..

    si tu cherche à accéder à une page sécurisé index.jsf par exemple, tu sera redirigé vers la page de login, si l'authentification réussi, la page index sera affiché.

  5. #5
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    je ne suis plus certains, mais j_Security_check est particulier, et je pense qu'on ne peux pas y appliquer de filtre, de servlet ou autre joyeuseté, c'est purement géré par le conteneur.

  6. #6
    Membre à l'essai
    Inscrit en
    Décembre 2002
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 16
    Points : 11
    Points
    11
    Par défaut
    Voilà où j'en suis :

    J'ai changé mon Filter comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public void doFilter(ServletRequest request, ServletResponse response,
    	    FilterChain chain)
    	    throws IOException, ServletException 
    	  {
     
    		  HttpServletResponse httpServletResponse = (HttpServletResponse) response;
     
    		  httpServletResponse.sendRedirect("/monappli/faces/index.jsp");
     
    		System.out.println(request.getParameter("j_username"));
    }
    Et la redirection se fait donc bien après l'authentification.

    Mais j'ai encore un comportement qui ne va pas.
    Si je suis non logué et que je tape (cas utilisateur qui a un marques-page par exemple) : http://localhost:8080/monappli/faces/index.jsp
    Il me donne bien mon formulaire d'authentification mais ne passe pas par mon Filter.

    En somme, pour que je passe par mon Filter il faut obligatoirement que l'utilisateur vienne de ma page "login.jsp".
    Ça ne me parait pas gênant si j'arrive à rediriger l'utilisateur sur login.jsp dans le cas où il n'est pas authentifié.

    Mais comment faire cela sur toutes mes pages avec JSF ?
    En faisant un autre filtre sur "faces/*" ?

    Merci en tout cas, ça m'aide bcp.

  7. #7
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Points : 5 059
    Points
    5 059
    Par défaut
    pourquoi tu utilise un filtre? tu n'en pas besoin si tu te base sur la sécurité du conteneur.
    Je pensais que tu utilisais spring security.

  8. #8
    Membre à l'essai
    Inscrit en
    Décembre 2002
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 16
    Points : 11
    Points
    11
    Par défaut
    Je n'utilise pas Spring Security, faute de temps pour m'y pencher.

    Pour l'authentification je n'utilise que j_security_check :

    Ma page login :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <form method="post" action="j_security_check" >
    Nom d'utilisateur : <input type="text" name="j_username" />
    <br />
    Mot de passe : <input type="password" name="j_password" />
    <br /><br /><br />
    <input type="submit" value="Connexion"/>
    </form>
    Et mon web.xml configuré comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
      <display-name>monappli</display-name>
      <welcome-file-list>
        <welcome-file>/login.jsp</welcome-file>
      </welcome-file-list>
     
      <!-- FACES JSF -->
      <context-param>
        <param-name>javax.faces.CONFIG_FILES</param-name>
        <param-value>/WEB-INF/faces-config.xml</param-value>
      </context-param>
      <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
      </servlet>
      <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>/faces/*</url-pattern>
      </servlet-mapping>
      
      <!-- SECURITY AUTHORISATION -->
      <security-constraint>
        <web-resource-collection>
          <web-resource-name>monappli Manager</web-resource-name>
          <url-pattern>/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
          <role-name>admin</role-name>
        </auth-constraint>
      </security-constraint>
      <security-constraint>
        <web-resource-collection>
          <web-resource-name>Unsecured resources</web-resource-name>
          <url-pattern>/template/*</url-pattern>
        </web-resource-collection>
      </security-constraint>
        <!-- AUTHENTIFICATION -->
      <login-config>
        <auth-method>FORM</auth-method>
        <realm-name>monappliRealm</realm-name>
        <form-login-config>
          <form-login-page>/login.jsp</form-login-page>
          <form-error-page>/login_error.jsp</form-error-page>
        </form-login-config>
      </login-config>
      <security-role>
        <role-name>admin</role-name>
      </security-role>
     
    <!--  FILTER AUTHENTIFICATION 
    -->
      <filter id="LoginFilter">
      <display-name>Login Filter</display-name>
      <filter-name>LoginFilter</filter-name>
      <filter-class>sessionUser.LoginFilter</filter-class>
     </filter>
    <filter-mapping>
    	<filter-name>LoginFilter</filter-name>
    	    <url-pattern>/j_security_check</url-pattern>
    	</filter-mapping> 
    </web-app>
    Est ce l'utilisation de j_security_check me bride ?
    Est ce quelqu'un peut m'en dire plus sur ce point ?

  9. #9
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Points : 5 059
    Points
    5 059
    Par défaut
    pourquoi le filtrer????

    voilà un tutoriel sur la gestion de sécurité sous tomcat, tu en trouvera d'autres sur le forum.

Discussions similaires

  1. Problème de listener, mémoire avec JSF
    Par curious_31 dans le forum JSF
    Réponses: 0
    Dernier message: 21/06/2010, 15h09
  2. Problème Tri sur date avec count
    Par ilalaina dans le forum Designer
    Réponses: 2
    Dernier message: 15/09/2009, 14h31
  3. Problème d'url pattern avec JSF+YUI
    Par lion13 dans le forum JSF
    Réponses: 4
    Dernier message: 18/12/2008, 15h24
  4. Debutant : Question sur jasperReport avec jsf
    Par kam81 dans le forum JSF
    Réponses: 2
    Dernier message: 08/11/2008, 19h53
  5. Réponses: 10
    Dernier message: 04/05/2007, 09h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo