2015-03-06 6 views
24

Czy istnieje sposób autoryzacji wysyłania postów pod konkretny adres URL za pomocą org.springframework.security.config.annotation.web.builders.HttpSecurity?Wiosenne zabezpieczenie autoryzuje żądanie dla adresu URL i metody przy użyciu HttpSecurity

Używam HttpSecurity jak:

@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(); 
} 

Chciałbym pozwolić żądania POST na/api/ścieżki subskrypcji. Tylko POST. Dzięki.

Odpowiedz

35

Spójrz tutaj https://github.com/spring-projects/spring-data-examples/tree/master/rest/security który ma

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

Zaktualizowano, aby wykluczyć wyłączenie csrf, które zostało skopiowane z przywoływanego kodu. Zostało to również omówione w innej odpowiedzi. –

4

Wiem, że to pytanie jest nieco stary, ale nie wierzę, wyłączając obsługę CSRF jest dopuszczalnym rozwiązaniem. Miałem ten sam problem, ale nie czuję się dobrze używając csrf.disable(). Zamiast tego dodałem następujący wiersz na dole strony w tagach formularza.

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

Dobrze, że zaktualizuję swoją odpowiedź, ponieważ część csrf nie jest odpowiednia dla pierwotnego pytania. Zostało to zrobione od udokumentowanego przykładu robienia połączeń spoczynkowych zamiast internetowych, jak widać tutaj https://github.com/spring-projects/spring-data-examples/blob/master/rest/security/src/main/java /example/springdata/rest/security/SecurityConfiguration.java –

Powiązane problemy