【发布时间】:2015-10-21 20:33:07
【问题描述】:
我正在使用带有 Thymeleaf 的 Spring Security,并希望在同时使用 CSRF 保护的不同站点上创建登录和注册表单。与以下 WebSecurity 配置一样,保护登录站点很容易
@Override
protected void configure(final HttpSecurity http) throws Exception {
http
.formLogin()
.loginPage("/login")
.permitAll()
.and()
.requestMatchers()
.antMatchers("/login", "/oauth/authorize", "/oauth/confirm_access")
.and()
.authorizeRequests()
.anyRequest()
.authenticated();
}
Spring 通常支持通过在 configure 方法中构建的 Security Filter Chain 添加 CSRF 保护。此过滤器链包含一个 CSRFFilter,用于添加/评估 CSRF 令牌。然后,此过滤器链将用于上述配置中定义的所有匹配项。获取应用于请求的过滤器的机制可以在方法中找到here
doFilterInternal(ServletRequest, ServletResponse, FilterChain)
问题是,如果我将“/register”站点添加到此配置中,用户首先会被重定向到“/login”站点。如果我不将其添加到上述配置中,则不会应用提到的 FilterChain(因此不会应用 CsrfFilter)。
所以我想要重用“/register”站点的过滤器链中的CsrfFilter,但我不知道该怎么做。
【问题讨论】:
标签: spring-security csrf thymeleaf