将客户端的XSRF-TOKEN与服务器进行比较

时间:2018-05-28 06:01:01

标签: java spring-boot spring-security http-headers csrf

要求是每个请求中的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")即使在用户登录后也会返回null。为什么会发生这种情况以及如何知道哪些请求需要检查?最重要的是可以这样检查吗?

0 个答案:

没有答案