我在 Spring 中的安全配置:
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.cors()
.and()
.authorizeRequests()
.antMatchers("/user/save")
.permitAll()
.and()
.authorizeRequests()
.antMatchers("/user/**")
.hasRole("USER")
.and()
.httpBasic()
.and()
.logout()
.clearAuthentication(true)
.invalidateHttpSession(true)
.deleteCookies("JSESSIONID")
.deleteCookies("XSRF-TOKEN")
.permitAll()
.and()
.csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());
}
我在前端使用 Angular 6。我正在端点上做一个POST/logout
。我可以看到根据请求发送JSESSIONID
的 cookie 和XSRF
cookie(使用 Chrome 中的开发人员工具)。
但是,在 Spring 服务器端应用程序的控制台上,我得到以下堆栈跟踪:
Invalid CSRF token found for http://localhost:8009/logout
...并且注销请求失败。
我不明白为什么 XSRF 令牌没有被更新(如果是这样的话),或者为什么令牌无效。任何帮助表示赞赏。