Bonjour,
Je suis entrain de customiser l'autentification et il y a des choses que ne comprend pas trop car cela à l'aire d'être automatique et
a cause de cela j'ai tourner en rond car je n'ai pas réussi à faire appelle à cette " loadUserByUsername".
Voici le début du fichier de mon spring sécurity:
Voici la classe de l'authentification:
Code java : 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 @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired private UserDetailsService userDetailsService; @Autowired private BCryptPasswordEncoder bCryptPasswordEncoder; @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { System.out.println("configure Security Config .java"); auth.userDetailsService(userDetailsService).passwordEncoder(bCryptPasswordEncoder); } @Override protected void configure(HttpSecurity http) throws Exception { System.out.println("==> csrf dispabled"); http.csrf().disable();// genere erreur 403 System.out.println("==> http.sessionManager"); http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS); http.authorizeRequests().anyRequest().authenticated(); System.out.println("==> addFilter"); http.addFilter(new JWTAuthentificationFilter(authenticationManager())); }
Code java : 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 public class JWTAuthentificationFilter extends UsernamePasswordAuthenticationFilter{ private AuthenticationManager authenticationManager; public JWTAuthentificationFilter(AuthenticationManager authenticationManager){ super(); this.authenticationManager = authenticationManager; } @Override public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException{ BookodMembre membre = null; try { System.out.println("333==> JWT Auhentification"); membre = new ObjectMapper().readValue(request.getInputStream(),Membre.class);
Quand on tente de se connecté pour la première fois on doit récupérer le jwt en donnant le login et mot de passe dans la requête "request".
une fois le try , automatiquement on fait appelle à la méthode "loadUserByUsername" de la class N'importeQuoi
voici cette class :
Quand je recherche dans mon IDE "NimporteQuoi", je le trouve seulement 1 résultat c'est mon propre fichier NimporteQuoi.java.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 @Service public class NimporteQuoi implements UserDetailsService{ @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException{ System.out.println("class NimporteQuoi"); return new User("toto","$2y$10$6Qu5XbUS9OekX5.huNhn/eaWWPm3NRG6Ghho0lxNLQSMBqzsjWvgu",new ArrayList<>()); } }
De même quand je recherche "loadUserByUsername".
De plus après avoir appelé "loadUserByUsername",
spring sécurité fait appelle à protected void successfulAuthentication(
Code java : 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 @Override public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException{ BookodMembre membre = null; try { System.out.println("333==> JWT Auhentification"); membre = new ObjectMapper().readValue(request.getInputStream(), BookodMembre.class); } catch (Exception e) { System.out.println("!!!!!!!!!!!!!ERREUR !!!!!!!!!:"); throw new RuntimeException(e); } return authenticationManager.authenticate( new UsernamePasswordAuthenticationToken(membre.getUsername(), membre.getpassword()) ); } @Override protected void successfulAuthentication( HttpServletRequest request, HttpServletResponse response, FilterChain chain, Authentication authResult) throws IOException, ServletException{ User springUser = (User)authResult.getPrincipal(); System.out.println("============ authentifaction reussi ======"+springUser);
Quelle est la class ou la méthode qui permet à spring boot d'appeler cette méthode dans un classe que j'ai volontairement appelé "NimporteQuoi".
Si quelqu'un à une explication car pour le moment c'est automatique et quand cela fonctionne cela n'est pas dérangeant mais dès qu'il y a un problème on tourne on rond car on a pas bien compris pourquoi cette méthode n'est pas appelé.
Null par j'ai instancié la classe NimporteQuoi ou fait un bean, mais j'ai quand même le résultat des mes test sur la console:
De même pour la méthode "successfulAuthentication", quelle est la classe qui fait appelle à cette méthode ?
Code console : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 333==> JWT Auhentification class NimporteQuoi ============ authentifaction reussi ======org.springframework.security.core.userdetails.User@64d1707:
merci d'avance de vos réponses![]()
Partager