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.
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
Hikage
SCJP / SCWCD & SCWSJD Certified / Spring Framework Certified
[Personal Web] [CV]
F.A.Q Spring Framework - Participez !
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 : 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 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 : 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 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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : 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 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 : Sélectionner tout - Visualiser dans une fenêtre à part
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);
Partager