ContainerRequestFilter ContainerResponseFilter nicht genannt

Ich versuche zu lernen, jersey, indem Sie ein kleines Rest-Dienst. Ich möchte die Verwendung der Filter, die aus bestimmten Gründen(Wie ich das ContainerResponseFilter für CORS - Header, um einen cross-domain-requests). Aber ich bin einfach nicht in der Lage, diese Filter abzufangen meinen Anruf. Ich habe gesehen, alle Beiträge für dieses problem und die meisten von Ihnen sagen, um sich mit annotation-provider oder in web.xml.
Ich habe versucht, die Registrierung der Dateien in web.xml sowie das geben ein @Provider Anmerkung für den container

Hier ist meine web.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- This web.xml file is not required when using Servlet 3.0 container, 
     see implementation details http://jersey.java.net/nonav/documentation/latest/jax-rs.html#d4e194 -->
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/classes/spring/config/BeanLocations.xml</param-value>
    </context-param>

    <servlet>
        <servlet-name>Jersey Web Application</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.rest.example</param-value>
        </init-param>
        <init-param>  
            <param-name>jersey.config.server.provider.packages</param-name>  
            <param-value>com.rest.example.cors</param-value>
        </init-param>
        <init-param>
            <param-name>com.sun.jersey.spi.container.ContainerResponseFilters</param-name>
            <param-value>com.rest.example.CORSFilter</param-value>
        </init-param>
        <init-param>
            <param-name>com.sun.jersey.spi.container.ContainerRequestFilters</param-name>
            <param-value>com.rest.example.RequestFilter</param-value>
        </init-param>

    </servlet>
    <servlet-mapping>
        <servlet-name>Jersey Web Application</servlet-name>
        <url-pattern>/webresources/*</url-pattern>
    </servlet-mapping>

</web-app>

Hier meine Filter:

package com.rest.example.cors;

import javax.ws.rs.ext.Provider;

import com.sun.jersey.spi.container.ContainerRequest;
import com.sun.jersey.spi.container.ContainerResponse;
import com.sun.jersey.spi.container.ContainerResponseFilter;

@Provider
public class CORSFilter implements ContainerResponseFilter {

    public ContainerResponse filter(ContainerRequest creq,
            ContainerResponse cresp) {

             cresp.getHttpHeaders().putSingle("Access-Control-Allow-Origin", "*");
             cresp.getHttpHeaders().putSingle("Access-Control-Allow-Credentials", "true");
             cresp.getHttpHeaders().putSingle("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT, OPTIONS, HEAD");
             cresp.getHttpHeaders().putSingle("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With");

            return cresp;
    }
}


package com.rest.example.cors;

import javax.ws.rs.ext.Provider;

import com.sun.jersey.spi.container.ContainerRequest;
import com.sun.jersey.spi.container.ContainerRequestFilter;

@Provider
public class RequestFilter implements ContainerRequestFilter {

    public ContainerRequest filter(ContainerRequest request) {
        System.out.println("request filter");
        return request;
    }
}

Link zu meinem github-Projekt.

  • Was container - /app-server und die version von Jersey verwenden Sie? Auch haben Sie versucht, die Registrierung Ihrer Filter in Ihre Jersey-Application-Klasse?
  • Im mit jersey-version 1.8. Im mit der VMware VFabric kommt mit STS. Wie registrieren wir die Filter in jersey-application-Klasse?
  • Registrieren Sie Ihre Filter, fügen Sie Sie der getClasses Methode in Ihrer javax.ws.rs.core.Application Objekt, obwohl es scheint, Ihre web.xml sollte die Handhabung für Sie. Sind Ihre REST-Methoden aufgerufen werden? Wie wissen Sie, dass Ihr Filter nicht aufgerufen wird?
  • Meine REST-Methoden aufgerufen werden. Ich einen debug-Punkt in meinem Filter und den code nie zuvor den debug-Punkt, aber es trifft den Ressource-Methoden.
  • fügen Sie einfach die Pakete, die details enthalten alle Filter, die in Ihrem ResourceConfig. Ich habe geschrieben man exapmle auch.
InformationsquelleAutor user2973475 | 2014-05-15
Schreibe einen Kommentar