javascript - 在 Spring Boot 和 Angular 之间处理 CORS 和 CSRF

标签 javascript java angular spring spring-boot

我有一个在端口 8888 上运行的 Spring Boot 后端应用程序和一个在 4200 端口上运行的 Angular 前端应用程序。

在我的 Spring Boot 应用程序中,我定义了以下 bean 来处理 CORS:

@Bean
public WebMvcConfigurer webMvcConfigurer() {
    return new WebMvcConfigurer() {
        @Override
        public void addCorsMappings(CorsRegistry registry) {
            registry.addMapping("/**");
        }
    };
}

我的 HttpSecurity 配置如下所示:

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
        .cors()
        .and()
        .csrf().disable()
        // ... the rest of the config
}

使用此配置一切正常,我可以从 Angular 应用程序成功调用我的 API。

但我想启用 CSRF,所以我将安全配置更改为以下内容:

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
        .cors()
        .and()
        .csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
        // ... the rest of the config
}

我已将以下 HttpInterceptor 添加到我的 Angular 应用程序中:

constructor(private tokenExtractor: HttpXsrfTokenExtractor) { }

intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    const token = this.tokenExtractor.getToken();
    if (token) {
        req = req.clone({ setHeaders: { 'X-XSRF-TOKEN': token } });
    }
    return next.handle(req);
}

问题是 tokenExtractor.getToken() 总是返回 null

相应的请求和响应 header 如下所示:

enter image description here

存在 XSRF-TOKEN 响应 cookie。

我不知道是什么问题。

我已经尝试在我的 Angular 应用中导入 HttpClientXsrfModule,但没有任何区别。

如果有任何建议,我将不胜感激。

最佳答案

不需要。您可以使用 chrome nosecurity 或安装 Allow-Control-Allow-Origin 插件来解决问题。

关于javascript - 在 Spring Boot 和 Angular 之间处理 CORS 和 CSRF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55076997/

相关文章:

javascript - 在本地存储中存储凭证

javascript - 如何在 JavaScript 中将整个脚本暂停一段时间?这可能吗?

javascript - 如何从行/列循环中的表格单元格中提取超链接

css - 使用 fx-layout ="column"的 Safari IOS 的 Flex 布局显示问题

angular - 如何将 Angular 6 部署到 Azure Web App - 您没有权限

javascript - 在javascript中获取多个数据输入?

java - hibernate注释配置找不到我的xml文件

java - 获取小盒子而不是实际字符

java - Hibernate删除的对象应该重新保存

动态改变高度的 Angular 动画