IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Spring Boot Java Discussion :

@PreAutorize me donne toujours 403


Sujet :

Spring Boot Java

  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    février 2004
    Messages
    1 822
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : février 2004
    Messages : 1 822
    Points : 1 544
    Points
    1 544
    Par défaut @PreAutorize me donne toujours 403
    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 :

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

    Ma config sécurité est comme ceci :

    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);
        }
    }
    Pourquoi ça balance de la 403 alors ?

    Pouvez-vous m'aider ?

    Un grand merci par avance à vous,

    A bientôt,
    Kin
    "Heureusement qu'il y avait mon nez, sinon je l'aurais pris en pleine gueule" Walter Spanghero

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    février 2004
    Messages
    1 822
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : février 2004
    Messages : 1 822
    Points : 1 544
    Points
    1 544
    Par défaut
    J'ai trouvé :

    Dans les autorities il faut mettre "ROLE_XXX", et utiliser @PreAuthorize("hasRole('XXX')")
    "Heureusement qu'il y avait mon nez, sinon je l'aurais pris en pleine gueule" Walter Spanghero

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Données toujours présente malgré un clearfields
    Par benn13 dans le forum Débuter
    Réponses: 13
    Dernier message: 19/04/2012, 13h37
  2. [Débutant] DropDownList donne toujours l'élément 0 selectionné
    Par helix_tp dans le forum Développement Web avec .NET
    Réponses: 4
    Dernier message: 17/04/2012, 08h50
  3. Réponses: 8
    Dernier message: 08/12/2011, 16h54
  4. vhost donne un 403
    Par tsumiko dans le forum Apache
    Réponses: 1
    Dernier message: 28/12/2010, 23h19
  5. [Tableaux] floatval() donne toujours 0 :(
    Par Torpedox dans le forum Langage
    Réponses: 1
    Dernier message: 30/12/2005, 17h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo