【问题标题】:PUT/DELETE got 403 Error but GET/POST worksPUT/DELETE 出现 403 错误,但 GET/POST 有效
【发布时间】:2018-05-23 01:25:49
【问题描述】:

有一个 Spring Boot 应用程序在后端运行。我已经实现了几个 GET/POST/PUT/DELETE API。

前端(AngularJS)可以做GET和POST,但是请求PUT和DELETE时会得到403 ERROR。 我添加了允许的来源(没有它 POST 将无法工作)来解决 CORS 问题。

CORS 设置

@Bean
public WebMvcConfigurer corsConfigurer() {
    return new WebMvcConfigurerAdapter() {
        @Override
        public void addCorsMappings(CorsRegistry registry) {
            registry.addMapping("/**").allowedOrigins("https://xxx1.com", "https://xxx2.com");
        }
    };
}

CSRF 设置:

  http.csrf().disable();

暂时禁用

下面是我的 DELETE 实现:

   @DeleteMapping("/listings/{id}")
    public ResponseEntity<Void> deleteListings(@PathVariable Long id) {
        log.debug("REST request to delete listings : {}", id);
        this.listingsService.delete(id);
        return ResponseEntity.status(HttpStatus.OK).body(null);
    }

有人可以帮忙吗?非常感谢!

【问题讨论】:

  • 你能分享或展示你的代码吗,也许在 github 上?

标签: angularjs http spring-boot cors


【解决方案1】:

看起来你可以链接allowedMethods("GET","POST","PUT","DELETE") according to the docs

这有帮助吗?

【讨论】:

【解决方案2】:

在您的 spring-boot 项目中创建 CORSFilter.java 文件。

@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
public class CORSFilter implements Filter {

    /**
     * CORS filter for http-request and response
     */
    public CORSFilter() {
    }

    /**
     * Do Filter on every http-request.
     */
    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
        HttpServletResponse response = (HttpServletResponse) res;
        HttpServletRequest request = (HttpServletRequest) req;
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Allow-Methods", "POST, PUT, GET, OPTIONS, DELETE");
        response.setHeader("Access-Control-Max-Age", "3600");
        response.setHeader("Access-Control-Allow-Headers", "access_token, authorization, content-type");

        if ("OPTIONS".equalsIgnoreCase(request.getMethod())) {
            response.setStatus(HttpServletResponse.SC_OK);
        } else {
            chain.doFilter(req, res);
        }
    }

    /**
     * Destroy method
     */
    @Override
    public void destroy() {
    }

    /**
     * Initialize CORS filter 
     */
    @Override
    public void init(FilterConfig arg0) throws ServletException {
    }
}

你可以参考这个帖子Angular 2 Spring Boot Login CORS Problems

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-17
    • 2019-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-11
    相关资源
    最近更新 更多