我不确定问题是涉及的技术,还是我对技术的理解。
我有一个HTML5应用程序写在JavaScript和HTML托pipe在Apache 2.2服务器上。
我有一个用java编写的java应用程序,它使用了一个简单的REST服务的jetty,guice,jackson,jersey。
这两个应用程序运行在同一个盒子上,一个在端口80上(纯Apache5上的HTML5应用程序),另一个在8080上(纯Java应用程序托pipe在jetty / guice上)
apache mod_proxy,为跨域AJAX调用configurationProxyPass&ProxyPassReverse
如何在XAMPP上启用跨源资源共享?
从浏览器上传文件到另一个域的最好方法是什么?
angular Js Nginx cors – 没有“Access-Control-Allow-Origin”标题
绕过“选项请求”的authentication(所有的头都在响应中发送)
我相信答案是在发送回来的标题。 CORS头文件告诉浏览器你允许外部应用程序打你的API。 我似乎无法弄清楚如何configuration我的Jetty,Guice服务器返回正确的CORS头。
我正在使用一个模拟Jetty服务器,所以我没有一个web.xml文件来添加标题。
这也可能与HTML5应用程序服务器(在本例中为apache 2.2)如何为应用程序提供服务有关。
Apache的httpd.conf文件有条目:
LoadModule headers_module modules/mod_headers.so <IFModule mod_headers> header add Access-Control-Allow-Origin "*" header add Access-Control-Allow-Methods: POST,GET,OPTIONS,PUT,DELETE,head header add Access-Control-Allow-headers: X-PingOTHER header add Access-Control-Max-Age: 1728000 </IfModule>
在我的guice servletconfiguration中,我有以下几点:
public class RestModule extends ServletModule{ @OverrIDe protected voID configureServlets() { bind(QuestbookService.class); // hook Jersey into Guice Servlet bind(GuiceContainer.class); // hook Jackson into Jersey as the POJO <-> JsON mapper bind(JacksonjsonProvIDer.class).in(Scopes.SINGLetoN); Map<String,String> guiceContainerConfig = new HashMap<String,String>(); guiceContainerConfig.put(ResourceConfig.PROPERTY_RESOURCE_FILTER_FACTORIES,httpStatusCodeMetricResourceFilterFactory.class.getCanonicalname()); serve("/*").with(GuiceContainer.class,guiceContainerConfig); } }
我认为这个问题是在我的guiceconfiguration,因为我没有一个地方设置响应头。
我正在使用embedded式docker服务器,因此我认为开发模式将绕过整个检查,但我可能是错的。
谢谢你的任何build议。
如何configurationWAMP apache服务器以允许跨域请求AJAX?
设置Nginx允许跨域请求子域
在Apache中使用Access-Control-Allow-Origin标头处理多个域
跨域分块上传使用CORS
飞行前OPTIONS请求故障转移httpS
做到我的应用程序的具体要求。 服务器需要完全从客户端中断。 客户端应该能够通过任何方法连接到通信服务器。
由于这个应用程序的第一个实现将被REST驱动,我需要能够从任何地方接受休息。
另外,我想要一个完整的xml-less配置,所以我使用带有嵌入式Jetty服务器的Guice。 由于我没有web.xml文件,我无法弄清楚如何设置头允许CORS。
经过大量的试验和错误,并阅读guice文档,我发现如何将CORS头添加到离开服务器的响应中。
Guice Servletmodulee类允许您将过滤器添加到您的servlet上下文中。 这使我可以让所有的请求通过一个给定的servlet。
因为我正在尝试构建一个响应CORS请求的其他应用程序,所以我需要一个过滤器,将cors头添加到任何请求的响应中。 现在,它响应所有的请求,但最终我只会响应,如果服务层响应200 – 300响应代码。
所以要使用guice在我的嵌入式服务器中启用cors,我建立了一个如下所示的过滤器:
@Singleton public class CorsFilter implements Filter{ @OverrIDe public voID doFilter(ServletRequest request,ServletResponse response,FilterChain filterChain) throws IOException,servletexception { if(response instanceof httpServletResponse){ httpServletResponse alteredResponse = ((httpServletResponse)response); addCorsheader(alteredResponse); } filterChain.doFilter(request,response); } private voID addCorsheader(httpServletResponse response){ //Todo: externalize the Allow-Origin response.addheader("Access-Control-Allow-Origin","*"); response.addheader("Access-Control-Allow-Methods","POST,head"); response.addheader("Access-Control-Allow-headers","X-PingOTHER,Origin,X-Requested-With,Content-Type,Accept"); response.addheader("Access-Control-Max-Age","1728000"); } @OverrIDe public voID destroy() {} @OverrIDe public voID init(FilterConfig filterConfig)throws servletexception{} }
Guice提供了一个抽象类,允许你配置Guice Servlet。
配置模块如下所示:
public class Restmodulee extends Servletmodulee{ @OverrIDe protected voID configureServlets() { bind(MyServiceClass.class); // hook Jersey into Guice Servlet bind(GuiceContainer.class); // hook Jackson into Jersey as the POJO <-> JsON mapper bind(JacksonjsonProvIDer.class).in(Scopes.SINGLetoN); Map<String,String>(); serve("/*").with(GuiceContainer.class,guiceContainerConfig); filter("/*").through(CorsFilter.class); } }
现在,guice将为每个响应添加cors头文件。 允许我的纯HTML 5应用程序与它交谈,不管它在哪里被服务。
只需将一行写入代码文件即可
response.addheader(“Access-Control-Allow-Origin”,“*”);
如果您只允许特定域名,请将您的http://www.yoursite.com替换为*
总结以上是内存溢出为你收集整理的访问控制允许起源不允许起源 – 如何使用一个非常简单的networking堆栈和guice启用CORS全部内容,希望文章能够帮你解决访问控制允许起源不允许起源 – 如何使用一个非常简单的networking堆栈和guice启用CORS所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)