Spring中的CORS请求无效

时间:2017-01-11 08:57:00

标签: spring spring-boot cors

我正在尝试启用某些IP来访问特定方法。

@Override
public void addCorsMappings(CorsRegistry registry) {
    registry.addMapping("/updateDetail")
    .allowedOrigins("127.0.0.1", "10.96.33.45")
    .allowedMethods("GET", "POST");
}

但是当我试图调用相同的方法时,我收到了无效的CORS请求。任何人都可以帮我这个吗?

3 个答案:

答案 0 :(得分:0)

org.springframework.web.cors.DefaultCorsProcessor在以下情况下返回“无效的CORS请求”

  1. 将Spring配置为使用CORS和
  2. 浏览器随请求发送“ Origin”标头,并且与您的服务器域/端口/方案不匹配,并且
  3. 响应中没有“ Access-Control-Allow-Origin”标头和
  4. 该请求不是预检请求。

如果不需要CORS,请在实现 WebSecurityConfigurerAdapter#configure(HttpSecurity http)的实现中调用cors().disable()(例如,如果您使用春季启动)。

或者您可以使用以下方法在响应中添加“ Access-Control-Allow-Origin”标头。 org.springframework.web.cors.CorsConfiguration addCorsMappings (就像您一样,但是也许您应该添加更多方法,或者url或IP不匹配?)。

答案 1 :(得分:0)

您正在寻找的该课程是什么

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

public SimpleCorsFilter() {
}

@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, GET, OPTIONS, DELETE, PUT");
    response.setHeader("Access-Control-Max-Age", "12000");
    response.setHeader("Access-Control-Allow-Headers", "Access-Control-Allow-Headers, Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");
    response.setHeader("Access-Control-Expose-Headers", "*");

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

@Override
public void init(FilterConfig filterConfig) {
}

@Override
public void destroy() {
}
}

此过滤器将解决您的所有cors问题

答案 2 :(得分:0)

我已经调试了几天这样的问题。实际的问题是我在服务uri名称/ data vs./daba等中输入错误。这导致SpringBoot无法检索CORS配置(即使当我具有/ **映射时),因此CORS-preflight的状态为403,这导致浏览器根本不发出实际请求-如果浏览器会触发该请求,Spring将返回“找不到资源”,然后我会注意到错别字快得多。