Сравнение XSRF-TOKEN клиента с сервером - PullRequest
0 голосов
/ 28 мая 2018

Требование заключается в том, что в каждом запросе значение XSRF-TOKEN должно проверяться с тем, которое хранится на сервере.Вот конфигурация безопасности:

protected void configure(HttpSecurity http) throws Exception {
        http  
                .formLogin()
                .loginProcessingUrl("/authenticate")
                .usernameParameter(...)
                .passwordParameter(...)
                .loginPage("/").permitAll()
                .successHandler(authenticationSuccessHandler)
                .failureHandler(authenticationFailureHandler)
                .and().logout().permitAll().logoutSuccessHandler(logoutSuccessHandler)
                .and().authorizeRequests()
                .antMatchers(...).permitAll().anyRequest().authenticated()
                .and().csrf().csrfTokenRepository(csrfTokenRepository())
                .and().addFilterAfter(csrfHeaderFilter(), CsrfFilter.class)

.exceptionHandling (). AuthenticationEntryPoint (authenticationEntryPoint);

Как я думал, это будет работать, внутри csrfHeaderFilter() я могу получить заголовок от каждогозапросите с помощью request.getHeader("X-XSRF-TOKEN"), а затем просто сравните этот токен с тем, который находится на сервере, который получен следующим образом: request.getSession(false).getAttribute("...CSRF_TOKEN").getToken()

Если они не совпадают - выведите ошибку.Но иногда request.getHeader("X-XSRF-TOKEN") возвращает ноль даже после того, как пользователь вошел в систему. Почему это происходит и как узнать, какие запросы требуют проверки?И самое главное, можно ли сделать такую ​​проверку?

...