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

Spring Java Discussion :

EJB pas injecté dans mon DAO


Sujet :

Spring Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20
    Par défaut EJB pas injecté dans mon DAO
    Bonjour,
    je suis entrain de realisé une application web EJB / ICEFaces ,je travaille avec Spring security . au début j'ai essayé le Tutorial fournit de Icefaces sur spring security . le probleme c'est que dans mon cas les rôles sont dynamique en plus dans ma page login il ya information . je vous explique :

    1 - l'utilisateur doit saisie son login , password et l'établissement qu'il est affecté
    2 - vérification login et password sur le serveur LDAP
    3 - vérification si l'utilisateur est bien assigné a cette établissement (interoger la base de donnée)
    4 - récupérer les rôles pour cet utilisateur
    chaque utilisateur est affecté a un ou plusieurs établissement et dans chaque établissement il a des rôles spécifique .
    chaque rôles est spécifique pour des méthodes et des menus

    bon j'ai 3 tables dans ma base de données :
    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
     TABLE USER_ETAB  
    ("USER_NAME" VARCHAR2(30),
      "COD_ETAB" VARCHAR2(30) 
    CONSTRAINT "USER_ETAB_PK" PRIMARY KEY ("USER_NAME", "COD_ETAB") )
     
     * TABLE ROLE_ETAB  : roles pour chaque etablissement
       (	"COD_ETAB" VARCHAR2(30), 
    	"COD_ROLE" VARCHAR2(30), 
    CONSTRAINT "ROLE_ETAB_PK" PRIMARY KEY ("COD_ETAB", "COD_ROLE"))
     
     * TABLE ROLE_PROC  : affectation les menus pour chaque roles
       (	"COD_ROLE" VARCHAR2(30 BYTE), 
    	"MENU" VARCHAR2(50 BYTE), 
    CONSTRAINT "ROLE_PROC_PK" PRIMARY KEY ("COD_ROLE", "MENU")
     
     * TABLE ROLE_USER_ETAB  : affectation rôles  user établissement
       (	"USER_NAME" VARCHAR2(30 BYTE), 
    	"COD_ETAB" VARCHAR2(30 BYTE), 
    	"COD_ROLE" VARCHAR2(30 BYTE), 
    CONSTRAINT "RGA_AFF_USER_ROLE_ETAB_PK" PRIMARY KEY ("USER_NAME", "COD_ETAB", "COD_ROLE")
    les données de c'est tables sont modifiables a partir d'une application de paramétrage .

    j'ai essayé d'adapté le code fournie en Tutorial pour mes besoin mes j'ai pas réussit

    ma page login :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <ice:form id="form1">            
    <ice:commandButton action="#{login.Connecter}"  value="Se Connecter"/>
    <ice:commandButton id="button2" value="Annuler"/>
    <ice:inputText id="j_username" required="true" value="#{login.userName}"/> <ice:inputSecret id="j_password" required="true" value="#{login.passWord}"/>
    <ice:selectOneMenu id="j_etab" partialSubmit="true" value="#{login.etab}">
    <f:selectItems id="j_etab_item" value="#{ApplicationBean1.centreEtabList}"/>
    </ice:selectOneMenu>
    </ice:form>
    ApplicationBean1 est un managedBean ds le quel j'ai initialisé une liste des centre Etablisement "centreEtabList" a partir d'un session Bean .


    login.java :

    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
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    public class login extends AbstractPageBean {
     
        private String userName;
        private String passWord;
        private String etab;
     
        @EJB
        private UserEtabFacadeLocal  affUserEtab;
     
        @EJB
        private EtablissementFacadeLocal  rgaEtab;
     
        @EJB
        private RoleProcFacadeLocal  affUserRole;
     
        public String getEtab() {
            return etab;
        }
     
        public void setEtab(String etab) {
            this.etab = etab;
        }
     
        public String getPassWord() {
            return passWord;
        }
     
        public void setPassWord(String passWord) {
            this.passWord = passWord;
        }
     
        public String getUserName() {
            return userName;
        }
     
        public void setUserName(String userName) {
            this.userName = userName;
        }
     
     
        public login() {
             System.out.println("init page");
            Exception ex = (Exception) FacesContext
                    .getCurrentInstance()
                    .getExternalContext()
                    .getSessionMap()
                    .get(AbstractProcessingFilter.SPRING_SECURITY_LAST_EXCEPTION_KEY);
     
            if (ex != null)
                FacesContext.getCurrentInstance().addMessage(
                        null,
                        new FacesMessage(FacesMessage.SEVERITY_ERROR, ex
                                .getMessage(), ex.getMessage()));
        }
     
        public String Connecter() throws IOException
        {
            String resultat="Succées";
            libEtab = findLibEtablissement ();
            System.out.println("Etablissment code  : "+etab);
            System.out.println("User Name     : "+userName);
            System.out.println("Mot de Pass   : "+passWord);
            boolean flag = ConnectionLdap(userName,passWord);
            if (flag) {
     
                boolean flag1 =userEatbTest (userName,etab);
                if (flag1) {
                     System.out.println("Redirection ");
                     FacesContext.getCurrentInstance().getExternalContext().redirect("/RP/j_spring_security_check?j_username=" + userName + "&j_password=" + passWord);
     
                }
     
            }
            return resultat;
        }
     
        public boolean ConnectionLdap (String user,String pass){
            boolean flag=false;
            try {
                LdapDao ldapdao = UtilsLdap.getServiceLdap();
                flag = ldapdao.authentif(userName, passWord);
                return flag;
            } catch (IOException ex) {
                Logger.getLogger(login.class.getName()).log(Level.SEVERE, null, ex);
            }
            return flag;
        }
     
        public boolean userEatbTest (String userName, String etab){
            boolean flag=false;
            Long count = affUserEtab.findUserEtab(userName, etab);
            System.out.println("count  :"+count);
            if ( count == 0)
                flag =false;
            else
                flag =true;
            return flag;
        }
     
     
        public String logout() throws java.io.IOException {
            FacesContext.getCurrentInstance().getExternalContext().redirect("/j_spring_security_logout");
            return "";
        }
    }
     
    dans class UserDaoImpl 
     
    public class UserDaoImpl implements UserDao {
        @EJB 
        private RoleProcFacadeLocal  affUserRole;
        public AppUser findUser(String userName) {
            //login loginBean = (login) (getBean("login"));
            login loginBean = (login) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("login");
            AppUser appUser = null;
            System.out.println("Loing etablissement ...."+loginBean.getEtab());
            Set<String> roles = new HashSet<String>();
            List<String> listRole= affUserRole.findUserRole(userName,loginBean.getEtab());
            for (String i : listRole)
            {
                roles.add(i);
            }
     
            appUser = new AppUser(userName, "", "", "test", roles);
     
     
            return appUser;
        }
    a l'exécution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ERROR [[default]] "Servlet.service()" pour la servlet default a généré une exception
    java.lang.NullPointerException
            at com.idee.security.UserDaoImpl.findUser(UserDaoImpl.java:18)

  2. #2
    Membre émérite Avatar de Heimdal
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 549
    Par défaut
    Salut,

    Si j'en crois l'extract de ton code, UserDaoImpl n'est pas un EJB. Dans ce cas tu ne peux pas utiliser l'injection @EJB. Je suppose que la NPE apparait a cette ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<String> listRole= affUserRole.findUserRole(userName,loginBean.getEtab());
    Un truc louche en passant: ton DAO accède à ta couche de service, ce qui est quelque peu inhabituelle. Une ti redesign pourra sans doute résoudre ceci.

  3. #3
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20
    Par défaut
    non la NPE apparait ds la ligne :

    login loginBean = (login) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("login");

    j'ai pas pu récupérer mon Bean "login"

    en plus comment faire pour récupérer les rôle

    dsl mais j'ai pas compri "Une ti redesign pourra sans doute résoudre ceci."

    merci d'avance

Discussions similaires

  1. Mes requêtes nommées ne sont pas trouvées dans mon war
    Par ploxien dans le forum Hibernate
    Réponses: 1
    Dernier message: 25/02/2009, 13h54
  2. [EJB3] Injection dans mon client
    Par safari25 dans le forum Java EE
    Réponses: 7
    Dernier message: 09/02/2009, 20h26
  3. Réponses: 9
    Dernier message: 20/11/2007, 11h55
  4. Réponses: 1
    Dernier message: 16/05/2007, 15h52
  5. Réponses: 3
    Dernier message: 16/05/2006, 16h34

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