2011-04-23 3 views
4

Je construis une application Web en utilisant jsf, ejbs et jpa. J'utilise actuellement un formulaire basé sur j_security_check pour gérer l'authentification.j_security_check vs Sécurité programmatique

Je dois mettre en place un support pour les cookies, c'est-à-dire l'option "Se souvenir de moi". Je veux également empêcher les attaques par force brute. Par exemple, verrouiller un certain utilisateur après 5 échecs de connexion.

Je comprends que l'autre option sera de le faire en utilisant ServletFilters programme etc.

Est-il possible de mettre en œuvre toutes ces utilisant j_security_check? ou devrais-je simplement revenir à le faire par programme?

Répondre

0

Cela doit être une implémentation personnalisée autour de j_security_check. Vous pouvez fixer un filtre de servlet avec j_security_check

<filter-mapping> 
    <filter-name>SecurityFilter</filter-name> 
    <url-pattern>/j_security_check</url-pattern> 
</filter-mapping> 

Dans le SecurityFilter, après vérification de sécurité revient UserPrincipal, définir les détails supplémentaires en session et continuer. Mais si userPrincipal est null, récupérez le nombre d'échecs dans la base de données et placez le message d'échec (y compris le nombre d'échecs) dans la session, qui peut être affiché dans la page de connexion.

public void doFilter(ServletRequest request, ServletResponse response, 
     FilterChain chain) throws IOException, ServletException { 

    Principal userPrincipal = null; 
      String username = httpServletRequest.getParameter("j_username"); 
    String rememberme = httpServletRequest.getParameter("rememberme"); 
    chain.doFilter(request, response); 
    userPrincipal = httpServletRequest.getUserPrincipal(); 

Se souvenir de moi doit être fixé à des cookies et la valeur de la variable « rememberme » sera disponible après la j_security_check terminée. En fonction du succès ou de l'échec de la connexion, un cookie peut être défini.

Questions connexes