无法致电Spring REST服务
我的春季服务
@RequestMapping(value = "/MAS/authenticate", method = RequestMethod.POST)
public ResponseEntity<Map<String, String>> authenticate(@RequestBody Subject subject) {
Map<String, String> result = new HashMap<String, String>();
result.put("result_detail", "Invalid Password");
result.put("result", "failure");
HttpHeaders responseHeaders = new HttpHeaders();
responseHeaders.setContentType(MediaType.APPLICATION_JSON);
responseHeaders.add("Access-Control-Allow-Origin", "*"); // also added header to allow cross domain request for any domain
return new ResponseEntity<Map<String, String>>(result, responseHeaders, HttpStatus.OK);
}
我的AJAX代码
$.ajax(
{
crossDomain: true,
type: "POST",
contentType: "application/json; charset=utf-8",
async: false,
url: "http://localhost:8080/SpringMVC/rest/MAS/authenticate",
headers: {"Access-Control-Allow-Origin" : "*"},
data:{},
dataType: "json", //also tried "jsonp"
success: function(data, status, jqXHR)
{
alert('success');
},
error: function(jqXHR, status)
{
alert('error');
}
});
我收到以下错误:(
跨域html" target="_blank">请求被阻止:同源策略禁止读取位于http:// localhost:8080 / SpringMVC / rest / MAS /
authenticate
的远程资源。可以通过将资源移到同一域或启用CORS来解决此问题。
我也尝试过dataType: "jsonp"
。它将我的body对象附加到URL中,URL变为不同的URL,然后无法访问我的服务URL,并得到404错误。
我的浏览器:firefox 36.0.4
我如何摆脱这个错误,有什么帮助吗?
我的AJAX通话和服务都还可以。在互联网上搜索了很多之后,我发现它的服务器端问题不是客户端问题。
在Spring的服务器端,我们必须实现允许CORS请求的过滤器。
过滤器将如下所示。
import java.io.IOException;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.web.filter.OncePerRequestFilter;
public class CORSFilter extends OncePerRequestFilter {
private static final Log LOG = LogFactory.getLog(CORSFilter.class);
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
response.addHeader("Access-Control-Allow-Origin", "*");
if (request.getHeader("Access-Control-Request-Method") != null && "OPTIONS".equals(request.getMethod())) {
LOG.trace("Sending Header....");
// CORS "pre-flight" request
response.addHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");
// response.addHeader("Access-Control-Allow-Headers", "Authorization");
response.addHeader("Access-Control-Allow-Headers", "Content-Type");
response.addHeader("Access-Control-Max-Age", "1");
}
filterChain.doFilter(request, response);
}
}
并在web.xml中将此过滤器应用于您的服务请求,如下所示
<filter>
<filter-name>cors</filter-name>
<filter-class>com.test.common.controller.CORSFilter</filter-class> <!-- your package name and filter class -->
</filter>
<filter-mapping>
<filter-name>cors</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
这可能会帮助遇到此问题的其他人。:)
问题内容: 因此,我有了这个Go http处理程序,该处理程序将一些POST内容存储到数据存储中,并检索其他一些信息作为响应。在后端,我使用: 在我的firefox OS应用程序中,我使用: 传入的部分都一直如此。但是,我的回复被阻止了。给我以下信息: 我尝试了许多其他操作,但是无法从服务器获得响应。但是,当我将Go POST方法更改为GET并通过浏览器访问该页面时,我得到的数据太糟糕了。我无法真
问题内容: 如何通过Ajax从远程URL获取内容? jQuery ajax请求被阻止,因为跨域 控制台日志 跨域请求被阻止:“相同源策略”不允许读取http://www.dailymotion.com/embed/video/x28j5hv上的远程资源。(原因:CORS标头“ Access-Control-Allow-Origin”缺失)。 跨域请求被阻止:“相同源策略”不允许读取http://w
问题内容: 所以当我尝试使用React将数据发送到后端时,我遇到了这个错误。据我了解,我需要允许后端和文件中的通信。这是我使用的一些链接: 没有“访问控制允许来源”-节点/ Apache端口问题 [Access-Control-Allow- Origin标头如何工作?]http://codingdict.com/questions/8006) 他们两个都有代码,但是没有帮助。 到目前为止,我的服务
问题内容: 我正在尝试提出一个简单的跨域请求,而Firefox始终通过此错误阻止它: 跨域请求被阻止:同源策略禁止读取[url]处的远程资源。可以通过将资源移到同一域或启用CORS来解决此问题。[网址] 它可以在Chrome和Safari中正常运行。 据我所知,我已经在PHP上设置了所有正确的标头,以使其能够正常工作。这是我的服务器响应的内容 我尝试使用Angular,jQuery和基本的XMLH
我也在应用程序根目录中使用。htaccess文件。(waleedahmad.kd.io/node)。
在浏览器的沙箱环境下,默认只允许js代码请求其所属域的数据,不同域名/ip/协议,都默认禁止. 跨域所需要的是,是响应浏览器发起的OPTIONS,及真正的GET/POST, 共2个请求哦. 所需要的逻辑CrossOriginFilter已经封装好了 如何解决 nutz给出的方案非常简单,仅需要在入口方法上添加CrossOriginFilter即可 @Filters(@By(type=CrossO