Bonjour,
J'utilise springsecurity pour sécuriser mon application web, seulement j'aimerai pouvoir récuperer l'id de l'utilisateur authentifié... je sais que ça doit pouvoir se faire mais je n'y arrive pas...
Merci par avance.
Version imprimable
Bonjour,
J'utilise springsecurity pour sécuriser mon application web, seulement j'aimerai pouvoir récuperer l'id de l'utilisateur authentifié... je sais que ça doit pouvoir se faire mais je n'y arrive pas...
Merci par avance.
Je te conseille de regarder à la classe SecurityContextHolder
J'ai vu qu'il fallait que je redéfinisse le UserDetailsService mais étant débutant j'ai un peu de mal à savoir comment faire... si vous pouviez m'indiquez quelques pistes svp..
Bon voilà ce que j'ai fait :
Et le service :Code:
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 import org.springframework.security.GrantedAuthority; import org.springframework.security.userdetails.User; /** * * @author NiKo */ public class UserDetailsImpl extends User { private static final long serialVersionUID = 1L; private final Users user; public UserDetailsImpl(Users user, String username, boolean enabled, GrantedAuthority[] authorities) throws IllegalArgumentException { super(user.getUsername(), user.getPassword(), enabled, authorities); this.user = user; } public int getIdUser() { return user.getIdUser(); } public String getLastname() { return user.getLastname(); } public String getFirstname() { return user.getFirstname(); } public String getEmail() { return user.getMail(); } @Override public String getUsername() { return user.getUsername(); } @Override public String getPassword() { return user.getPassword(); } public boolean getEnabled() { return user.isEnabled(); } }
et dans mon applicationContext.xml :Code:
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 public class UserDetailsServiceImpl implements UserDetailsService { private IUserService userDao; private Users user; public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException, DataAccessException { List listUser = (List) userDao.getUserByUsername(username); Iterator itUser = listUser.iterator(); while (itUser.hasNext()) { user = (Users) itUser.next(); } return new UserDetailsImpl(user, null, false, null); } /** * @return the userDao */ public IUserService getUserDao() { return userDao; } /** * @param userDao the userDao to set */ public void setUserDao(IUserService userDao) { this.userDao = userDao; }
Mais lorsque je compile j'ai :Code:
1
2
3
4
5
6 <authentication-provider user-service-ref="myUserDetailsService"/> <beans:bean id="myUserDetailsService" class="service.UserDetailsServiceImpl"> <beans:property name="userDao" ref="UserService"> </beans:property> </beans:bean>
Merci par avance.Code:
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 java.lang.IllegalArgumentException: Cannot pass a null GrantedAuthority array org.springframework.util.Assert.notNull(Assert.java:112) org.springframework.security.userdetails.User.setAuthorities(User.java:235) org.springframework.security.userdetails.User.<init>(User.java:138) org.springframework.security.userdetails.User.<init>(User.java:99) org.springframework.security.userdetails.User.<init>(User.java:69) entites.UserDetailsImpl.<init>(UserDetailsImpl.java:21) service.UserDetailsServiceImpl.loadUserByUsername(UserDetailsServiceImpl.java:34) org.springframework.security.providers.dao.DaoAuthenticationProvider.retrieveUser(DaoAuthenticationProvider.java:83) org.springframework.security.providers.dao.AbstractUserDetailsAuthenticationProvider.authenticate(AbstractUserDetailsAuthenticationProvider.java:121) org.springframework.security.providers.ProviderManager.doAuthentication(ProviderManager.java:188) org.springframework.security.AbstractAuthenticationManager.authenticate(AbstractAuthenticationManager.java:46) org.springframework.security.ui.webapp.AuthenticationProcessingFilter.attemptAuthentication(AuthenticationProcessingFilter.java:82) org.springframework.security.ui.AbstractProcessingFilter.doFilterHttp(AbstractProcessingFilter.java:258) org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53) org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390) org.springframework.security.ui.logout.LogoutFilter.doFilterHttp(LogoutFilter.java:89) org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53) org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390) org.springframework.security.context.HttpSessionContextIntegrationFilter.doFilterHttp(HttpSessionContextIntegrationFilter.java:235) org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53) org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390) org.springframework.security.concurrent.ConcurrentSessionFilter.doFilterHttp(ConcurrentSessionFilter.java:99) org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53) org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390) org.springframework.security.util.FilterChainProxy.doFilter(FilterChainProxy.java:175) org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:183) org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:138)
bonjour,
ton bean UserDetailsImpl accepte dans son constructeur GrantedAuth... mais apparemment il est vide. Vérifie ta config.Et essai de remplir le tableau par des données que tu récupère soit d'un bean soit directement dans ta config.
En fait je sais pas si ça peut venir de là mais j'ai utilisé le modèle de table necessaire à spring telle que :
Je sais pas s'il y a un lien...Code:
1
2
3
4
5
6
7
8
9
10
11
12 CREATE TABLE users ( username VARCHAR(50) NOT NULL PRIMARY KEY, password VARCHAR(50) NOT NULL, enabled BIT NOT NULL ); CREATE TABLE authorities ( username VARCHAR(50) NOT NULL, authority VARCHAR(50) NOT NULL ); ALTER TABLE authorities ADD CONSTRAINT fk_authorities_users foreign key (username) REFERENCES users(username);
Si j'utilise ça :
ça fonctionne...Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException, DataAccessException { List listUser = (List) userDao.getUserByUsername(username); Iterator itUser = listUser.iterator(); while (itUser.hasNext()) { user = (Users) itUser.next(); } if (null == user) { log.error("Pas d'utilisateur trouvé!"); throw new UsernameNotFoundException("user not found in database"); } else { log.debug("utilisateur trouvé!"); } return new User(user.getUsername(), user.getPassword(), user.isEnabled(), new GrantedAuthority[]{new GrantedAuthorityImpl("ROLE_USER")}); }
donc je pense que spring ne me récupère pas les droit mais comment puis je les récuperer.??
En fait il fallait que je définisse la méthode pour récupérer les authority :
Voilà pour ceux qui chercherai...Code:
1
2
3
4
5
6
7 public GrantedAuthority[] getAuthorities(String username) { List<Authorities> roles = (List<Authorities>) userDao.getUserRoles(username); List list = new ArrayList(); for (Authorities role : roles) { list.add(new GrantedAuthorityImpl(role.getAuthority())); } return (GrantedAuthority[]) list.toArray(new GrantedAuthority[0]);
Cordialement.