Używam Spring-Security 3.2.0.RC2 z konfiguracją Java. Konfiguruję prostą konfigurację HttpSecurity, która prosi o podstawowe uwierzytelnianie/v1/**. żądania GET działa, ale nie z żądania POST:W Spring-Security z Java Config, dlaczego httpBasic POST chce tokenu csrf?
HTTP Status 403 - Invalid CSRF Token 'null' was found on the request parameter '_csrf' or header 'X-CSRF-TOKEN'.
Mój config bezpieczeństwo wygląda następująco:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Resource
private MyUserDetailsService userDetailsService;
@Autowired
//public void configureGlobal(AuthenticationManagerBuilder auth)
public void configure(AuthenticationManagerBuilder auth)
throws Exception {
StandardPasswordEncoder encoder = new StandardPasswordEncoder();
auth.userDetailsService(userDetailsService).passwordEncoder(encoder);
}
@Configuration
@Order(1)
public static class RestSecurityConfig
extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.antMatcher("/v1/**").authorizeRequests()
.antMatchers("/v1/**").authenticated()
.and().httpBasic();
}
}
}
Każda pomoc w tej sprawie bardzo mile widziane.
Jeśli dan't chcesz wyłączyć CSRF (ponieważ jest tam bez powodu) można dodać ukryte pole z wartością csrf i dodaj wartość, jaką sugeruje starmandeluxe w przyjętym poście. To działało dobrze dla mnie, bez wyłączania csrf – Xtroce
@Xtroce ma rację, chociaż w moim przypadku musiałem dodać 'X-CSRF-TOKEN' do nagłówków ajax post *. (Dodanie '_csrf' do parametrów posta ajax * nie zadziałało.) – inanutshellus
Dodanie komentarza @Xtroce, jeśli użyjesz thymeleaf do szablonów, możesz dodać