gpt4 book ai didi

angular - spring boot angular csrf token 握手错误

转载 作者:行者123 更新时间:2023-12-04 13:55:33 25 4
gpt4 key购买 nike

因此,我不断收到有关从前端( Angular )到后端(springboot)的请求的错误。我有一个假设,我没有将它从前端正确发送到后端。
Spring 安全配置:

 @Override
protected void configure(HttpSecurity http) throws Exception {
http.httpBasic().disable()
.csrf()
.csrfTokenRepository (this.getCsrfTokenRepository())
.and()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
}

@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurerAdapter() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**").allowedOrigins("http://localhost:4200");

}
};
}
private CsrfTokenRepository getCsrfTokenRepository() {
CookieCsrfTokenRepository tokenRepository = CookieCsrfTokenRepository.withHttpOnlyFalse();
tokenRepository.setCookiePath("/");
return tokenRepository;
}
Angular 请求:
 let url = "http://localhost:8080/api/v1/get_txt"
this.http.get(url).subscribe(response => {
console.log(response)

// post request


let _csrf = this.tokenExtractor.getToken() as string == null ? "test":this.tokenExtractor.getToken();
const formData = new FormData();
formData.append("name", "name")
formData.append("_csrf", _csrf)
let post = "http://localhost:8080/api/v1/testpost"

this.http.post(post, formData, {
headers: new HttpHeaders().set("X-XSRF-TOKEN", _csrf),//.set("Cookie", 'XSRF-TOKEN='+_csrf)
})
.subscribe(response => {
console.log(response)
})
})
请求被发送的证明:
sent csrf token
我还忘记提及的是我收到了 403 错误。
我会感谢每一个支持,但我不想禁用 csrf token ,也不想删除 spring boot 依赖;)
我如何获得 token :
app.module.ts:

import:[HttpClientXsrfModule.withOptions({cookieName: 'XSRF-TOKEN'})]

app.component.ts
-> import
-> inject into constructor
let _csrf = this.tokenExtractor.getToken();
更新
我发现 spring boot 无法从请求中提取 cookie。
spring boot extract cookie error
所以它必须是 Angular 请求的错......

最佳答案

您从 Angular 发送的 header 名称旨在用作 HTTP 参数。在您的代码中,它将是 let post = "http://localhost:8080/api/v1/testpost?_csrf=" + _csrf .
所以当 CookieCsrfTokenRepository设置为 CSRF token 存储库,并且您希望将其作为 header 发送,则此 token 的默认 header 名称为 X-XSRF-TOKEN ( as described here ):

this.http.post(post, formData, {
headers: new HttpHeaders().set("X-XSRF-TOKEN", _csrf)
})
...

关于angular - spring boot angular csrf token 握手错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63178253/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com