【问题标题】:Consuming a RESTful Web Service with jQuery使用 jQuery 使用 RESTful Web 服务
【发布时间】:2015-10-07 16:13:56
【问题描述】:
关于指南:
https://spring.io/guides/gs/consuming-rest-jquery/
我明白了:
XMLHttpRequest cannot load h__p://rest-service.guides.spring.io/greeting.
No 'Access-Control-Allow-Origin' header is present on the requested resource.
Origin 'h__p://localhost:8000' is therefore not allowed access.
很抱歉这个菜鸟问题,但我需要做什么才能测试上述页面上的代码?
谢谢大家!
【问题讨论】:
标签:
jquery
spring
web-services
rest
【解决方案1】:
这似乎是一个 cors 问题。这意味着您不是从春天而是从 elseweare 为应用程序提供服务。您必须创建一个过滤器才能配置标题
@Component
public class CORSFilter implements Filter{
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with");
chain.doFilter(req, res);
}
@Override
public void destroy() {
}
}
应该可以解决的
【解决方案2】:
这看起来像是一个 CORS 问题。我以前用我的 spring mvc 应用程序遇到过这个问题。我有一个解决它的@component CORS 实现。
您可能还需要配置前端以使用 CORS。
另外请记住,对于安全问题,允许任何来源访问您的 API 可能并不安全。因此,不建议用于生产实现(“Access-Control-Allow-Origin”、“*”)。
原文来源:http://patrickgrimard.com/2013/12/12/cross-origin-resource-sharing-cors-requests-with-spring-mvc/
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;
@Component
public class SimpleCORSFilter implements Filter {
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with");
response.addHeader("Access-Control-Allow-Headers", "Content-Type");
chain.doFilter(req, res);
}
public void init(FilterConfig filterConfig) {}
public void destroy() {}
}