【发布时间】:2015-01-22 03:17:09
【问题描述】:
我在 Glassfish 3.1.2.2 下部署了一个 Java 应用程序,它使用 jersey 提供休息服务。前端写在angularjs。我的web.xml如下:
<web-app>
<servlet>
<servlet-name>qpark rest service</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>com.restfulservice.restful;org.codehaus.jackson.jaxrs</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>qpark rest service</servlet-name>
<url-pattern>/restservice/*</url-pattern>
</servlet-mapping>
</web-app>
前端正在另一台服务器 (apache) 中运行。当从前端 Glassfish 发送请求时响应如下错误:
No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost' is therefore not allowed access.
这是逻辑,因为前端和后端由不同的服务器提供服务。为了避免这种情况,我配置了一个filter,它将Access-Control-Allow-Origin 添加到响应头中。此过滤器必须在web.xml 注册,如下所示:
<servlet>
<servlet-name>Gateway Servlet</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.spi.container.ContainerResponseFilters</param-name>
<param-value>com.filters.CrossOriginResourceSharingFilter</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
我的问题是我还想将第二个过滤器映射到每个 restservice。也就是说,我想添加这样的东西
<servlet-mapping>
<servlet-name>Gateway Servlet</servlet-name>
<url-pattern>/restservice/*</url-pattern>
</servlet-mapping>
但这是不允许的。
问题是如何在web.xml中添加/组合/注册这两个过滤器
【问题讨论】:
标签: java angularjs cors web.xml servlet-filters