PUT/DELETE 出现 403 错误,但 GET/POST 有效
Posted
技术标签:
【中文标题】PUT/DELETE 出现 403 错误,但 GET/POST 有效【英文标题】:PUT/DELETE got 403 Error but GET/POST works 【发布时间】: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 上? 【参考方案1】:看起来你可以链接allowedMethods("GET","POST","PUT","DELETE")
according to the docs。
这有帮助吗?
【讨论】:
这个链接也可能会派上用场:spring.io/blog/2015/06/08/cors-support-in-spring-framework 我已经测试过了,但没有运气。现在出现 405 错误。【参考方案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
【讨论】:
以上是关于PUT/DELETE 出现 403 错误,但 GET/POST 有效的主要内容,如果未能解决你的问题,请参考以下文章
尽管有 AllowAny 权限,django-rest-framework 在 POST、PUT、DELETE 上返回 403 响应
laravel向我显示此错误此路由不支持POST方法。支持的方法:GET,HEAD,PUT,DELETE