es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Admin por defecto de Spring Security

Estoy desarrollando una API REST con más de 400 puntos finales con Spring Boot. Quiero hacer una configuración para dar automáticamente a todos los usuarios que tengan el rol de ADMIN acceso a todos los puntos finales sin tener que agregar @PreAuthorize(“hasRole(‘ADMIN’)”) en cada punto final específico.

¿Cómo es posible hacer una configuración en el método a continuación para lograr este objetivo?

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.cors();
    http.csrf().disable()
                .authorizeRequests().antMatchers(
                "/authenticate",
                "/postulant/nouveau",
                "/postulant/all",
                "/modifierPostulant/{id}",
                "/plannificationConcours/all",
                "/v2/api-docs",
                "/swagger-resources",
                "/swagger-resources/**",
                "/configuration/ui",
                "/configuration/security",
                "/swagger-ui.html",
                "/webjars/**",
                "/v3/api-docs/**",
                "/swagger-ui/**").permitAll()
                .antMatchers(HttpHeaders.ALLOW).permitAll()
                .anyRequest().authenticated()
                .and()
                .exceptionHandling().authenticationEntryPoint(jwtAuthenticationEntryPoint)
                .and()
                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);

    http.addFilterBefore(jwtRequestFilter, UsernamePasswordAuthenticationFilter.class);
}
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para dar automáticamente a todos los usuarios que tienen el rol de ADMIN acceso a todos los endpoints sin añadir @PreAuthorize("hasRole('ADMIN')") en cada endpoint específico, añade la siguiente configuración al método configure(HttpSecurity http):

    http.authorizeRequests().antMatchers("/**").hasRole("ADMIN")
    

    Esto permitirá que cualquier petición con el rol de ADMIN acceda a todos los endpoints. El patrón /** coincidirá con cualquier URL de petición.

    El método configure(HttpSecurity http) final quedará así:

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.cors();
        http.csrf().disable()
        .authorizeRequests().antMatchers(
        "/authenticate",
        "/postulant/nouveau",
        "/postulant/all",
        "/modifierPostulant/{id}",
        "/plannificationConcours/all",                
        "/v2/api-docs",
        "/swagger-resources",
        "/swagger-resources/**",
        "/configuration/ui",
        "/configuration/security",
        "/swagger-ui.html",
        "/webjars/**",
        "/v3/api-docs/**",
        "/swagger-ui/**").permitAll()
        .antMatchers(HttpHeaders.ALLOW).permitAll()
        .antMatchers("/**").hasRole("ADMIN")
        .anyRequest().authenticated()
        .and()
        .exceptionHandling().authenticationEntryPoint(jwtAuthenticationEntryPoint)
        .and()
        .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
    
        http.addFilterBefore(jwtRequestFilter, UsernamePasswordAuthenticationFilter.class);
    }
    

    Con esta configuración, cualquier petición realizada por un usuario con rol de ADMIN tendrá permiso para acceder a todos los endpoints.

Comments are closed.