Spring security autorise la demande d'url et de méthode à L'aide de HttpSecurity

Existe-t-il un moyen d'autoriser la requête post à une url spécifique en utilisant org.springframework.security.config.annotation.web.builders.HttpSecurity ?

J'utilise HttpSecurity comme:

    @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 les requêtes POST /api/abonnement chemin. Seul POST. Grâce.

24
demandé sur ilopezluna 2015-03-06 23:24:19

2 réponses

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");
44
répondu Matt C 2016-02-29 17:24:41

Je sais que cette question est un peu ancienne mais je ne crois pas que la désactivation du support csrf soit une réponse acceptable. J'ai eu ce même problème mais je ne me sens pas bien en mesure d'utiliser csrf.désactiver(). 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}" />
4
répondu Patrick 2016-02-26 01:24:31