web-dev-qa-db-fra.com

La sécurité de printemps autorise la demande d'URL et de méthode à l'aide de HttpSecurity

Existe-t-il un moyen d'autoriser une demande de publication pour une URL spécifique en utilisant org.springframework.security.config.annotation.web.builders.HttpSecurity?

J'utilise HttpSecurityas:

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .addFilterAfter(new CsrfCookieGeneratorFilter(), CsrfFilter.class)
            .exceptionHandling()
            .authenticationEntryPoint(authenticationEntryPoint)
        .and()
            .rememberMe()
            .rememberMeServices(rememberMeServices)
            .key(env.getProperty("jhipster.security.rememberme.key"))
        .and()
            .formLogin()
            .loginProcessingUrl("/api/authentication")
            .successHandler(ajaxAuthenticationSuccessHandler)
            .failureHandler(ajaxAuthenticationFailureHandler)
            .usernameParameter("j_username")
            .passwordParameter("j_password")
            .permitAll()
        .and()
            .logout()
            .logoutUrl("/api/logout")
            .logoutSuccessHandler(ajaxLogoutSuccessHandler)
            .deleteCookies("JSESSIONID")
            .permitAll()
        .and()
            .headers()
            .frameOptions()
            .disable()
            .authorizeRequests()
                .antMatchers("/api/register").permitAll()
                .antMatchers("/api/activate").permitAll()
                .antMatchers("/api/authenticate").permitAll()
                .antMatchers("/api/logs/**").hasAuthority(AuthoritiesConstants.ADMIN)
                .antMatchers("/api/subscriptions").permitAll()
                .antMatchers("/api/**").authenticated();
}

Je voudrais autoriser POST demandes à/api/chemin d'abonnement. Seulement POST. Merci.

31
ilopezluna

Jetez un oeil ici https://github.com/spring-projects/spring-data-examples/tree/master/rest/security qui a

http
  .httpBasic().and()
  .authorizeRequests()
    .antMatchers(HttpMethod.POST, "/employees").hasRole("ADMIN")
    .antMatchers(HttpMethod.PUT, "/employees/**").hasRole("ADMIN")
    .antMatchers(HttpMethod.PATCH, "/employees/**").hasRole("ADMIN");
58
Matt C

Je sais que cette question est un peu ancienne, mais je ne pense pas que désactiver le support de CSRF soit une réponse acceptable. J'ai eu le même problème, mais je ne me sens pas capable d'utiliser csrf.disable (). Au lieu de cela, j'ai ajouté la ligne suivante au bas de la page à l'intérieur des balises de formulaire.

<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}" />
5
Patrick

Il suffit de mentionner le chemin que vous devez supprimer l'authentification comme ceci

    http
       .httpBasic().and()
       .authorizeRequests()
       .antMatchers("/employees" , "/employees/**")
       .permitAll().anyRequest().authenticated()
       .and().csrf().disable()
1
Akitha_MJ