У меня есть служба Spring MVC REST с включенной Spring Security (3.2.5.RELEASE). Когда я включаю @EnableWebMvcSecurity, для меня автоматически создается форма входа по адресу http://localhost:8080/login. Если я использую эту форму для входа в систему, все работает нормально.
Проблема возникает, когда я пытаюсь войти, отправив запрос POST напрямую. В своем почтовом запросе я указываю имя пользователя и пароль. Я также включаю http-заголовок «X-CSRF-TOKEN», а для значения заголовка я использую JSESSIONID, который, как я вижу, был сгенерирован в файле cookie. Но когда я отправляю этот запрос POST, я получаю следующий результат:
HTTP Status 403 - Invalid CSRF Token '29F5E49EFE8D758D4903C0491D56433E'
was found on the request parameter '_csrf' or header 'X-CSRF-TOKEN'.
Что я делаю неправильно? Я указываю неверное значение токена? Что это за JSESSIONID? Если я не ввожу значение для этого заголовка или опускаю заголовок целиком, он сообщает мне «Обнаружен нулевой токен CSRF».
Ниже представлена моя конфигурация Spring Security:
@Configuration
@EnableWebMvcSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("user").password("password").roles("USER");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/secure/**").authenticated()
.and()
.formLogin()
.usernameParameter("username")
.passwordParameter("password")
.and()
.logout()
.and()
.httpBasic()
.and()
.csrf();
}
}
Буду очень признателен за любую помощь! Заранее спасибо!