Bonjour, je voulais implementer Mon propre UserDetailService pour pouvoir recuperer d'autres information comme le prénom le nom de mes Employés. J'ai suivi l'exemple qui est dans Spring In Pratice mais lors que je retoourne un UserDetailsImpl qui etends Users de Spring Security il me dit que GrantedAuthority[] ne peut être null. Bref je donne ci-dessus mon code pour etre plus explicite.
Fichier de config de ApplicationContext-security.xml pour dire à spring que la verification c'est dans BD et qu'il faut utiliser mon model "Employe" et non celui par défaut de spring
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 <security:authentication-provider user-service-ref="myUserDetailsService"/> <bean id="myUserDetailsService" class="services.UserDetailsServiceImpl"> <property name="daoEmploye" ref="employeJbcDaoSupport"></property> </bean>Voici la classe UserDetailsImp qui etends Users de Spring
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 package model; import org.springframework.security.GrantedAuthority; import org.springframework.security.userdetails.User; public class UserDetailsImp extends User{ private static final long serialVersionUID = 1L; private final Employe employe; public UserDetailsImp(Employe employe, String username, boolean enabled, boolean accountNonExpired, boolean credentialsNonExpired, boolean accountNonLocked, GrantedAuthority[] authorities) throws IllegalArgumentException { super(employe.getUsername(), employe.getPassword(), enabled, accountNonExpired, credentialsNonExpired, accountNonLocked, authorities); this.employe=employe; } public int getID(){ return employe.getID(); } public String getNom(){ return employe.getNom(); } public String getPrenom(){ return employe.getPrenom(); } public String getEmail(){ return employe.getEmail(); } public String getUsername(){ return employe.getUsername(); } public String getPassword(){ return employe.getPassword(); } public String getEnabled(){ return employe.getEnabled(); } public String getRole(){ return employe.getRole(); } }Voici l'mplementation de UserDetailsService
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 package services; import model.Employe; import model.UserDetailsImp; import org.springframework.dao.DataAccessException; import org.springframework.security.userdetails.UserDetails; import org.springframework.security.userdetails.UserDetailsService; import org.springframework.security.userdetails.UsernameNotFoundException; import dao.IEmployeDao; public class UserDetailsServiceImpl implements UserDetailsService { private IEmployeDao daoEmploye; public IEmployeDao getDaoEmploye() { return daoEmploye; } public void setDaoEmploye(IEmployeDao daoEmploye) { this.daoEmploye = daoEmploye; } public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException, DataAccessException { // TODO Auto-generated method stub Employe myemploye= daoEmploye.getEmployeByLogin(username); if(myemploye==null){ throw new UsernameNotFoundException( "Ce login n'existe pas: " + username); } return new UserDetailsImp(myemploye,null,false,false,false,false,null); } }Je suis vraiment preneur si kel kun peut m'aider je suis nouveau dans spring.Dansl'exemple du livre on a mis un return new UserDetailsImp(myemploye)
mais ça donne une erreure disant que le constructeur est indefini. c'est pourquoi j'ai mis dans mon exemple
UserDetailsImp(myemploye,null,false,false,false,false,null);
Merci pour vos reactions
Partager