访问控制允许起源不允许起源 – 如何使用一个非常简单的networking堆栈和guice启用CORS

访问控制允许起源不允许起源 – 如何使用一个非常简单的networking堆栈和guice启用CORS,第1张

概述访问控制允许起源不允许起源 – 如何使用一个非常简单的networking堆栈和guice启用CORS

我不确定问题是涉及的技术,还是我对技术的理解。

我有一个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所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1241437.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存