2015-04-28 126 views
0

我想实现CORSFilter,但无法获取它来修改头文件。我在执行中错过了什么?我在WildFly8上使用Java7。无法获取CORSFilter工作

web.xml中:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" 
    version="3.1"> 
    <context-param> 
    <description>Automatically scan WEB-INF/lib jars and WEB-INF/classes directory for both @Provider and JAX-RS resource classes (@Path, @GET, @POST etc..) and register them.</description> 
    <param-name>resteasy.scan</param-name> 
    <param-value>true</param-value> 
    </context-param> 

    <filter> 
    <filter-name>CORS</filter-name> 
    <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class> 

    <init-param> 
     <param-name>cors.allowOrigin</param-name> 
     <param-value>*</param-value> 
    </init-param> 

    <init-param> 
     <param-name>cors.supportedMethods</param-name> 
     <param-value>GET, HEAD, POST, DELETE, PUT, OPTIONS</param-value> 
    </init-param> 

    <init-param> 
     <param-name>cors.maxAge</param-name> 
     <param-value>3600</param-value> 
    </init-param> 
    </filter> 

    <filter-mapping> 
    <filter-name>CORS</filter-name> 
    <url-pattern>/*</url-pattern> 
    </filter-mapping> 
</web-app> 

双龙项:

<dependency> 
    <groupId>com.thetransactioncompany</groupId> 
    <artifactId>cors-filter</artifactId> 
    <version>2.4</version> 
    </dependency> 

我已经写了一个过滤器来做到这一点,它正确地增加了访问控制允许的信息,但是我从什么也得不到CORS过滤器。任何人都可以发现我可能做错了,它没有添加标题条目?

----更新--------- 这里是我写的这是工作的过滤器:

import java.io.IOException; 

import javax.servlet.FilterChain; 
import javax.servlet.FilterConfig; 
import javax.servlet.ServletException; 
import javax.servlet.ServletRequest; 
import javax.servlet.ServletResponse; 
import javax.servlet.annotation.WebFilter; 
import javax.servlet.http.HttpServletResponse; 

@WebFilter(filterName = "HTML5CorsFilter", urlPatterns = {"/resources/api-docs/*"}) 
public class HTML5CorsFilter implements javax.servlet.Filter { 

    @Override 
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 
     System.out.println("************In the DoFilter method.**************"); 
     HttpServletResponse res = (HttpServletResponse) response; 
     res.addHeader("Access-Control-Allow-Origin", "*"); 
     res.addHeader("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT"); 
     res.addHeader("Access-Control-Allow-Headers", "Content-Type"); 
     chain.doFilter(request, response); 
    } 

    @Override 
    public void init(FilterConfig filterConfig) throws ServletException { 
    } 

    @Override 
    public void destroy() { 
    } 
} 

我只想用这种过滤器,除了我一直负责使用com.thetransactioncompany.cors.CORSFilter。我需要这些(最初)的细节是允许一个单独的swagger ui安装服务器多个应用程序,所以我试图添加的标题需要在swagger jsons的请求上。

回答

1

Servlet过滤器用于servlet。您是否试图过滤请求到JAX-RS资源?在这种情况下,您应该使用javax.ws.rs.container.ContainerRequestFilter

我相信(但并未确认)JAX-RS处理接管在HTTP请求处理管道很早就有了,之前也Servlet过滤一命呜呼。

+0

我增加了额外的信息我原来的职位。我包括我正在工作的过滤器。如果我可以使用它并继续前进,那将会更简单。 – SteveS