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

Services Web Java Discussion :

Sécuriser son appli web (droits, authentification)


Sujet :

Services Web Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 20
    Par défaut Sécuriser son appli web (droits, authentification)
    là, je ne sais vraiment plus où chercher

    je développe une application avec plusieurs fonctions d'utilisateurs, disons admin et user pour simplifier.
    J'utilise des facelets (templating) et JSF.

    Je souhaite donc :

    1. qu'en rentrant une URL, si la personne n'est pas authentifiée (quelque soit sa fonction), la page ne s'affiche pas ;

    2. que sur une liste, les admins puissent faire des modifs et que les users ne puissent que voir la liste.

    J'ai tenté une approche avec Jaas, avec Spring-security, mais tout ça me semble trop difficile.
    J'aimerais pouvoir gérer ces droits plus simplement.

    Quelqu'un pourrait-il m'aiguiller ?

  2. #2
    Membre éprouvé
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Par défaut
    Je suis un peu d'accord avec toi pour spring security et le reste, ces solutions sont parfois complexes à mettre en place pour des besoins assez modérés.

    De mon côté pour une application simple, j'ai géré l'accès et les interdictions à mes pages à l'aide d'un simple listener JSF.
    L'idée est simplement de vérifier si l'utilisateur en session est loggé ainsi que son niveau de droit. Si ce n'est pas suffisant il est redirigé sur le formulaire de login ou une page d'erreur.

    C'est tout con, ça ne va pas pour une grosse sécurité métier mais c'est suffisant si les rôles sont simples.

    Si c'est une solution qui te semble faire l'affaire, je peux te poster un exemple.

  3. #3
    Membre éprouvé
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Par défaut
    Suite à ton MP, voici un exemple qui interdit l'accès aux pages réservés aux admins, et qui dans tous les cas, refuse de laisser l'utilisateur voir autre chose que LoginPage tant qu'il n'est pas identifié.

    goToLogin est une action globale du faces-config.
    + ce listener doit être enregistré globalement

    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
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    /**
     *
     * @author Stef
     */
    public class LoginPhaseListener implements PhaseListener
    {
     
        public static final String VIEWID_LOGIN =  "/login/LoginPage.jsp";
     
     
        public final HashSet<String> adminOnlyViews = new HashSet<String>();
     
        public LoginPhaseListener()
        {
            //Populate a list of admin-only views
            adminOnlyViews.add( "/CampaignList.jsp" );
            adminOnlyViews.add( "/AdminPanel.jsp" );
            adminOnlyViews.add( "/AdminWelcome.jsp" );
        }
     
     
        @Override
        public PhaseId getPhaseId()
        {
            return PhaseId.RESTORE_VIEW;
        }
     
        @Override
        public void beforePhase(PhaseEvent event)
        {
        }
     
        @Override
        public void afterPhase(PhaseEvent event)
        {
            FacesContext fc = event.getFacesContext();
     
            // retrieve the session bean...
            LoginSession loginSession = getLoginSessionBean(fc);
     
            // Check if user is not logged in AND not already on the login page.
            if ( loginSession == null || !loginSession.isUserLoggedIn() )
            {
                if(!fc.getViewRoot().getViewId().equals(VIEWID_LOGIN))
                    executeNavigateAction(fc, "goToLogin");
     
                return;
            }
     
            //admin-only views
            if( adminOnlyViews.contains( fc.getViewRoot().getViewId() ) && !loginSession.isAdministator() )
            {
                try
                {
                    //sends a 403!
                    HttpServletResponse response = (HttpServletResponse) fc.getExternalContext().getResponse();
                    response.sendError(HttpServletResponse.SC_FORBIDDEN);
                }
                catch (IOException ex)
                {
                    //should never happen
                    Logger.getLogger(LoginPhaseListener.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
     
        }
     
        /**
         * Executes a global navigation action
         * @param fc the current context
         * @param action the action name in face-config
         */
        private void executeNavigateAction( FacesContext fc, String globalAction  )
        {
            fc.getApplication().getNavigationHandler().handleNavigation(fc, null, globalAction);
        }
     
     
        /**
         * Helper method for facilitating session bean retrieval
         * @param fc the current faces context
         * @return the login session bean, or null if it doesn't exist yet.
         */
        private LoginSession getLoginSessionBean( FacesContext fc)
        {
            return (LoginSession) fc.getApplication().getELResolver().getValue(fc.getELContext(), null, "LoginSessionBean");
     
        }
     
    }

  4. #4
    Membre habitué
    Inscrit en
    Mars 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 10
    Par défaut Authentification et Visual jsf
    là, je ne sais vraiment plus où chercher

    je développe une application avec pour que et l'admin accède seulement à l'application .
    J'utilise des pages visual jsf et hibernate .

    Je souhaite donc :

    1. qu'en rentrant une URL, si la personne n'est pas authentifiée (quelque soit sa fonction), la page ne s'affiche pas ;

    J'ai veux utiliser les fichier session beans car je crois qu'ils fait ce role, mais tout ça me semble trop difficile.
    J'aimerais pouvoir gérer cette authentification plus simplement.

    Quelqu'un pourrait-il m'aiguiller ?

Discussions similaires

  1. Authentification windows dans une appli web ASP.NET
    Par paladice dans le forum ASP.NET
    Réponses: 2
    Dernier message: 01/08/2013, 09h16
  2. [PHP 5.0] sécuriser son site web
    Par unix27 dans le forum Langage
    Réponses: 6
    Dernier message: 06/02/2009, 16h18

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