GWT-No’Access-Control-Allow-Origin’标头出现在请求的资源上
我们正在尝试在tomcat上实现CORSfilter以允许跨域请求。 我们在两个不同的tomcat(不同的机器)上有两个GWT项目。 在阅读CORSfilterDocument CORS之后 ,我刚刚在tomcat的web.xml文件中添加了CORSfilter。
` CorsFilter org.apache.catalina.filters.CorsFilter cors.allowed.origins * cors.allowed.methods GET,POST,HEAD,OPTIONS,PUT cors.allowed.headers Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers cors.exposed.headers Access-Control-Allow-Origin,Access-Control-Allow-Credentials cors.support.credentials true cors.preflight.maxage 10 CorsFilter /* `
但它不起作用。 我得到了另一个与之相关的堆栈问题,但有点混淆如何在GWT中实现filter?
StackQues
什么是使用GWT实现CORSfilter的实际程序?
扩展Filter
并在服务器端添加类,如下所示:
注意:这只是一个让你前进的简单例子。 如果你没有正确配置它,请告诉自己安全风险……
查看本文的最后一部分
public class CORSFilter implements Filter { // For security reasons set this regex to an appropriate value // example: ".*example\\.com" private static final String ALLOWED_DOMAINS_REGEXP = ".*"; public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) servletRequest; HttpServletResponse resp = (HttpServletResponse) servletResponse; String origin = req.getHeader("Origin"); if (origin != null && origin.matches(ALLOWED_DOMAINS_REGEXP)) { resp.addHeader("Access-Control-Allow-Origin", origin); if ("options".equalsIgnoreCase(req.getMethod())) { resp.setHeader("Allow", "GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS"); if (origin != null) { String headers = req.getHeader("Access-Control-Request-Headers"); String method = req.getHeader("Access-Control-Request-Method"); resp.addHeader("Access-Control-Allow-Methods", method); resp.addHeader("Access-Control-Allow-Headers", headers); // optional, only needed if you want to allow cookies. resp.addHeader("Access-Control-Allow-Credentials", "true"); resp.setContentType("text/x-gwt-rpc"); } resp.getWriter().flush(); return; } } // Fix ios6 caching post requests if ("post".equalsIgnoreCase(req.getMethod())) { resp.addHeader("Cache-Control", "no-cache"); } if (filterChain != null) { filterChain.doFilter(req, resp); } } @Override public void destroy() { } @Override public void init(FilterConfig arg0) throws ServletException { } }
不要忘记在web.xml中添加Filter
(在WAR文件中,而不是tomcat web.xml)文件。
corsFilter .CORSFilter corsFilter /*
- 使用application / json contentType的AJAX POST调用获取“no’Access-Control-Allow-Origin’标头”错误
- 这个CORS处理程序安全吗?
- 如何将Cross Origin资源共享与Spring MVC 4.0.0 RESTful Webservice集成
- 在Spring 5 Webflux中启用CORS?
- IE11 CORS拒绝https上的OPTIONS
- 在ContainerResponseFilter中获得响应(JAX-RS 2)
- 在Tomcat 8.0中启用CORS响应筛选器
- Spring Security的跨源资源共享
- Google App Engine和CORS