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:
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()));
  }

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
 
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 :

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<>());
    }
 
}


Quand je recherche dans mon IDE "NimporteQuoi", je le trouve seulement 1 résultat c'est mon propre fichier NimporteQuoi.java.
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:

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:

De même pour la méthode "successfulAuthentication", quelle est la classe qui fait appelle à cette méthode ?



merci d'avance de vos réponses