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)