Bonjour à tous,
Voilà 1 mois que je me remets à Java, avec Spring Boot, et je sèce sur un truc en particulier.
Concernant la sécurité, je pense avoir tout fait propre, mais j'ai un doute concernant la gestion des "autorities". Voici ma route de test :
J'obtiens systématiquement une 403 FORBIDDEN, alors que si je décommente "@PreAuthorize("hasRole('ADMIN')")", la route s'exécute et mon booléen est bien à "true", le user courant a bien le role "ADMIN"
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 @GetMapping() @PreAuthorize("hasRole('ADMIN')") public ResponseEntity<List<User>> getAllUsers() { try { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); // Obtenir les autorités de l'utilisateur actuel Collection<? extends GrantedAuthority> authorities = authentication.getAuthorities(); // Vérifier le rôle de l'utilisateur boolean isAdmin = authorities.stream() .anyMatch(authority -> authority.getAuthority().equals("ADMIN")); // Afficher le rôle de l'utilisateur pour déboguer System.out.println("L'utilisateur actuel est admin : " + isAdmin); List<User> users = userService.getAll(); return new ResponseEntity<>(users, HttpStatus.OK); } catch (Exception e) { return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR); } }
Ma config sécurité est comme ceci :
Pourquoi ça balance de la 403 alors ?
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72 package com.fidelizr.config; import com.fidelizr.security.JwtAuthenticationEntryPoint; import com.fidelizr.security.JwtRequestFilter; import com.fidelizr.security.JwtUtil; import com.fidelizr.security.UserDetailsServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import org.springframework.security.config.http.SessionCreationPolicy; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; @Configuration @EnableWebSecurity @EnableGlobalMethodSecurity(prePostEnabled = true) public class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired private JwtAuthenticationEntryPoint jwtAuthenticationEntryPoint; @Autowired private UserDetailsServiceImpl userDetailsService; @Autowired private JwtRequestFilter jwtRequestFilter; @Autowired private JwtUtil jwtUtil; @Autowired public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { auth.userDetailsService(userDetailsService).passwordEncoder(bCryptPasswordEncoder()); } @Bean public BCryptPasswordEncoder bCryptPasswordEncoder() { return new BCryptPasswordEncoder(); } @Override public void configure(AuthenticationManagerBuilder auth) throws Exception { auth.userDetailsService(userDetailsService).passwordEncoder(bCryptPasswordEncoder()); } @Override @Bean public AuthenticationManager authenticationManagerBean() throws Exception { return super.authenticationManagerBean(); } @Override protected void configure(HttpSecurity http) throws Exception { http.csrf().disable() .authorizeRequests() .antMatchers("/api/auth/**").permitAll() .antMatchers("/api/globals/**").permitAll() .antMatchers("/api-docs/**").permitAll() .antMatchers("/swagger-ui*/**").permitAll() .anyRequest().authenticated() .and() .exceptionHandling().authenticationEntryPoint(jwtAuthenticationEntryPoint) .and().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS); http.addFilterBefore(jwtRequestFilter, UsernamePasswordAuthenticationFilter.class); } }
Pouvez-vous m'aider ?
Un grand merci par avance à vous,
A bientôt,
Kin
Partager