我有一个网络服务,比如:
@Controller
@RequestMapping("/")
public class ApplicationController {
@RequestMapping(value="/Changes", method = RequestMethod.GET)
public String inspect(ModelMap model) {
model.addAttribute("msg", "example");
return "index";
}
}
在链接中: “localhost:8081/ChangesPDF/Changes?...”
我正在尝试通过链接中的AlFresco获取此Web服务的响应:"localhost:8080/share"
。我现在有不同的端口(当我有相同的端口时,这很好地工作),所以,使用不同的端口,我在AlFresco中得到错误:
跨源请求被阻止:同一源策略不允许在以下位置读取远程资源:http://localhost:8081/ChangesPDF/Changes?...(原因:缺少CORS的“访问控制允许原点”标题)。
如何添加此标题?
我认为你的代码可能需要使用Spring的@CrossOrigin
注释,例如:
import org.springframework.web.bind.annotation.CrossOrigin;
....
@Controller
@RequestMapping("/")
public class ApplicationController {
@CrossOrigin
@RequestMapping(value="/Changes", method = RequestMethod.GET)
public String inspect(ModelMap model) {
model.addAttribute("msg", "example");
return "index";
}
}
这将允许所有的起源,这可能对你的需求来说是足够的,也可能是不够的。
作为参考,我在这篇文章中找到了上述内容,并在Spring博客中提到了这一点。
希望这有帮助!
如果您使用的是 Spring 4.2 ,则可以使用 @CrossOrigin 注释:
@Controller
@RequestMapping("/")
public class ApplicationController {
@CrossOrigin
@RequestMapping(value="/Changes", method = RequestMethod.GET)
public String inspect(ModelMap model) {
model.addAttribute("msg", "example");
return "index";
}
}
否则,您需要在Spring应用程序中注册一个CORS过滤器。类似于这样。
您应该添加一个过滤器,将“访问控制允许源”设置为接受域“localhost:8081”(*for all)。
最有可能的是,你会在这里找到你的答案 核心过滤器不起作用
更多说明:
首先创建一个过滤器类
public class CorsFilter implements Filter {
private static final Logger log = Logger.getAnonymousLogger();
@Override
public void init(FilterConfig filterConfig) throws ServletException {}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) servletResponse;
HttpServletRequest request = (HttpServletRequest) servletRequest;
// can be moved to properties
String[] allowDomain = {"localhost:8080","localhost:8081"};
String originHeader = request.getHeader("host");
for(String domian : allowDomain){
if(originHeader.endsWith(domian))
response.setHeader("Access-Control-Allow-Origin", originHeader);
break;
}
filterChain.doFilter(servletRequest, servletResponse);
}
@Override
public void destroy() {}
}
将映射添加到您的web。xml类
<filter>
<filter-name>cors</filter-name>
<filter-class>full name of your filter class here</filter-class>
</filter>
<filter-mapping>
<filter-name>cors</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
您应该根据您的要求在web.xml配置中正确定义URL模式
问题内容: 我使用球衣JAX-Rs作为Web服务来查询mysql。我尝试通过混合移动应用程序使用Web服务。 我指的是这个 http://coenraets.org/blog/2011/11/building-restful-services-with-java- using-jax-rs-and-jersey-sample- application/#comment-440541 在服务器端,以
Access-Control-Allow-Origin响应 header 指示是否该响应可以与具有给定资源共享原点。 Header type Response header Forbidden header name no 语法 Access-Control-Allow-Origin: *Access-Control-Allow-Origin: <origin> 指令 * 对于没有凭据的请求,服务
的Access-Control-Allow-Headers响应报头在响应用于一个预检请求指示哪个HTTP标头将通过提供Access-Control-Expose-Headers使实际的请求时。 的简单标头,Accept,Accept-Language,Content-Language,Content-Type(任一,但仅与一个MIME类型其解析值的(忽略参数)application/x-www-f
Access-Control-Allow-Credentials响应报头指示的请求的响应是否可以暴露于该页面。当true值返回时它可以被暴露。 凭证是 Cookie ,授权标头或 TLS 客户端证书。 当作为对预检请求的响应的一部分使用时,它指示是否可以使用凭证进行实际请求。请注意,简单的GET请求不是预检的,所以如果请求使用凭证的资源,如果此资源不与资源一起返回,浏览器将忽略该响应,并且不会返回
我有一个码头服务器来运行我的Web服务。最近我开发了一个程序来使用Web服务,并遇到了Access-Control-Allow-Origin问题。 如何将访问控制Allow Origin:*添加到jetty嵌入式服务器。 下面是webappcontext代码。 非常感谢。
我知道这件事以前被处理过很多次。但是我可以在响应中看到头上已经有了Access-Control-Allow-Origin。 accept:/ accept-encoding:gzip,deflate,sdch,br access-control-request-headers:x-an-webservice-identitykey access-control-request-method:pos