【发布时间】:2020-11-20 11:58:18
【问题描述】:
所以我不断收到关于从前端(角度)到后端(springboot)的请求的错误。我假设我没有正确地将其从前端发送到后端。
弹簧安全配置:
@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;
}
角度请求:
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 令牌,也不想删除 spring boot 依赖;)
我如何获得令牌:
app.module.ts:
import:[HttpClientXsrfModule.withOptions({cookieName: 'XSRF-TOKEN'})]
app.component.ts
-> import
-> inject into constructor
let _csrf = this.tokenExtractor.getToken();
【问题讨论】:
-
我认为标题名称是错误的。你可以试试
X-CSRF-TOKEN吗?例如:headers: new HttpHeaders().set("X-CSRF-TOKEN", _csrf) -
@MarcoLucidi 感谢您的建议,但遗憾的是它也不起作用......
-
@MarcoLucidi 你非常接近。实际上,标题名称应该是 X-XSRF-TOKEN。
-
您能说说您使用的是哪个版本的 Angular 吗?
标签: angular spring spring-boot spring-security csrf