我尝试使用CsrfTokenRepository
覆盖csrf令牌创建。该解决方案与spring-boot 2配合良好。x,但不与3一起工作。x:
配置类:
@Configuration
@EnableWebSecurity
public class ProjectConfig {
@Bean
public CsrfTokenRepository customTokenRepository() {
return new CustomCsrfTokenRepository();
}
@Bean
public SecurityFilterChain configuration(HttpSecurity http) throws Exception {
http
.csrf(c -> {
c.csrfTokenRepository(customTokenRepository());
})
.authorizeHttpRequests()
.anyRequest().permitAll();
return http.build();
}
- CustomCsrfTokenRepository:
public class CustomCsrfTokenRepository implements CsrfTokenRepository {
@Override
public CsrfToken generateToken(HttpServletRequest request){
log.info(1);
{
@Override
public void saveToken(CsrfToken token, HttpServletRequest request, HttpServletResponse response){
log.info(2);
}
@Override
public CsrfToken loadToken(HttpServletRequest request){
log.info(3);
}
}
我创建了一个简单的端点:
@GetMapping("/hello")
public String getHello() {
return "Get Hello!";
}
现在,当我获取/hello端点时,我希望代码到达CustomCsrfTokenRepository#loadToken
方法(与spring-boot 2一样。x),但我只收到“Get Hello!”的回应。
我确定了2之间的差异。x和3.xSpring Boot ,其中CsrfTokenRepository
导入不同的HttpServlet...
示例:对于javax.servlet.http...
库中的2.x,对于3。x -从jakatra..
。
如何在spring-boot 3中正确重复此解决方案。x?
1条答案
按热度按时间gjmwrych1#
在Spring Security 6中,CSRF令牌仅在需要时延迟创建。您的端点不需要它,因此不会创建它。