104 votes

Configuration de Spring Security : erreur HTTP 403

Je suis en train de sécuriser mon site web en utilisant Spring Security en suivant les guides sur le web.

Donc, du côté serveur, j'ai les classes suivantes.

Mon WebSecurityConfigurerAdapter:

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter implements ApplicationContextAware {

    @Override
    protected void registerAuthentication(AuthenticationManagerBuilde rauthManagerBuilder) throws Exception {
        authManagerBuilder.inMemoryAuthentication().withUser("user").password("password").roles("ADMIN");
    }
}

Mon contrôleur:

@Controller
//@RequestMapping("/course")
public class CourseController implements ApplicationContextAware {

    @RequestMapping(value="/course", method = RequestMethod.GET, produces="application/json")
    public @ResponseBody List get(  // Le critère utilisé pour trouver.
        @RequestParam(value = "what", required = true) String what,
        @RequestParam(value = "value", required = true) String value) {
        //.....
    }

    @RequestMapping(value = "/course", method = RequestMethod.POST, produces = "application/json")
    public List upload(@RequestBody Course[] cs) {

    }
}

Ce qui me perturbe beaucoup, c'est que le serveur ne répond pas à la méthode POST/DELETE, alors que la méthode GET fonctionne bien. Au fait, j'utilise RestTemplate côté client.

Les exceptions sont les suivantes:

Exception in thread "main" org.springframework.web.client.HttpClientErrorException: 403 Forbidden
    at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:91)
    at org.springframework.web.client.RestTemplate.handleResponseError(RestTemplate.java:574)
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:530)
    at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:487)
    at org.springframework.web.client.RestTemplate.delete(RestTemplate.java:385)
    at hello.Application.createRestTemplate(Application.java:149)
    at hello.Application.main(Application.java:99)

J'ai cherché sur internet pendant des jours. Je n'ai toujours pas d'idée. S'il vous plaît aidez. Merci beaucoup

1voto

Zarpyk Points 31

Je publie ceci au cas où quelqu'un d'autre le trouverait utile à l'avenir. J'ai passé des heures à chercher ce qui ne fonctionnait pas et j'ai finalement trouvé la solution, sur Postman en faisant un POST à http://localhost:8080/login/ n'est pas la même chose que de faire un POST à http://localhost:8080/login (avec "/" à la fin de la demande, cela renverra une erreur 403 interdit)

0voto

Vérifiez votre jeton que vous envoyez via l'en-tête et également interrogez votre base de données pour savoir si ce jeton existe ou non.

Remarque : Ce qui précède s'applique uniquement si vous utilisez le mécanisme d'authentification par jeton Spring Boot.

0voto

À présent, pour Spring Security 6.1.3, la configuration ci-dessous est suffisante pour l'authentification de base

   @Bean
   public SecurityFilterChain securityFilterChain(HttpSecurity httpSecurity)throws Exception {
  httpSecurity.httpBasic(Customizer.withDefaults());
  return httpSecurity.build(); }

-5voto

Sagar Talreja Points 1
http.httpBasic().disable();
http.authorizeRequests().antMatchers("/signup").permitAll().antMatchers("/*")
     .fullyAuthenticated().and().formLogin()
     .and().csrf().disable();
http.csrf().disable();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X