Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 2.6:ContainerRequestFilter:不在请求范围内_Java_Rest_Tomcat_Jersey - Fatal编程技术网

Java 2.6:ContainerRequestFilter:不在请求范围内

Java 2.6:ContainerRequestFilter:不在请求范围内,java,rest,tomcat,jersey,Java,Rest,Tomcat,Jersey,我在tomcat上有一个服务rest,它可以正常工作,但当我在另一个tomcat服务器上部署它时,它会抛出一个异常 我正在尝试实现ContainerRequestFilter。这个异常似乎是由我的authenticationFilter(实现ContainerRequestFilter的类)中的@Context resourceInfo引起的。但我不明白为什么以及如何修复它。(我跟着 最后是web.xml <?xml version="1.0" encoding="UTF-8"?>

我在tomcat上有一个服务rest,它可以正常工作,但当我在另一个tomcat服务器上部署它时,它会抛出一个异常

我正在尝试实现ContainerRequestFilter。这个异常似乎是由我的authenticationFilter(实现ContainerRequestFilter的类)中的@Context resourceInfo引起的。但我不明白为什么以及如何修复它。(我跟着

最后是web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
     version="3.1">

<servlet>
    <servlet-name>Example API</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>javax.ws.rs.Application</param-name>
        <param-value>services.MyApplication</param-value>
    </init-param>
    <init-param>
        <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
        <param-value>true</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>Example API</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>

示例API
org.glassfish.jersey.servlet.ServletContainer
javax.ws.rs.Application
services.MyApplication
com.sun.jersey.api.json.POJOMappingFeature
真的
1.
示例API
/*

我做错了什么?

我终于找到了解决方案。我必须创建一个实现DynamicFeature的类,并通过自定义构造函数注册我的AuthenticationFilter

@Provider
public class AuthenticationDynamicFeature implements DynamicFeature {

    @Override
    public void configure(ResourceInfo resourceInfo, FeatureContext featureContext) {
        featureContext.register(new AuthenticationFilter(resourceInfo));
    }
}
这里是自定义构造函数:

public AuthenticationFilter(ResourceInfo resourceInfo) {
    super();
    this.resourceInfo = resourceInfo;
}

我尝试了很多其他方法,这是唯一一种对我有效的方法。

是的。它在我的tomcat上有效,但当我在另一台tomcat服务器上部署.war文件时,它会出现错误。(我会编辑帖子以注意它)
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
     version="3.1">

<servlet>
    <servlet-name>Example API</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>javax.ws.rs.Application</param-name>
        <param-value>services.MyApplication</param-value>
    </init-param>
    <init-param>
        <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
        <param-value>true</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>Example API</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
@Provider
public class AuthenticationDynamicFeature implements DynamicFeature {

    @Override
    public void configure(ResourceInfo resourceInfo, FeatureContext featureContext) {
        featureContext.register(new AuthenticationFilter(resourceInfo));
    }
}
public AuthenticationFilter(ResourceInfo resourceInfo) {
    super();
    this.resourceInfo = resourceInfo;
}