Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.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 jersey筛选器在Tomcat上引发异常_Java_Rest_Maven_Tomcat_Jersey - Fatal编程技术网

Java jersey筛选器在Tomcat上引发异常

Java jersey筛选器在Tomcat上引发异常,java,rest,maven,tomcat,jersey,Java,Rest,Maven,Tomcat,Jersey,我正在尝试在我的客户端和Web服务器之间实现rest令牌安全性。我实现了一个过滤器来获取http身份验证头并检查客户端是否有效。虽然,出于某种原因,我的Tomcat在结束和开始时抛出了一个异常 我对过滤器的实现是: import java.security.Principal; import javax.ws.rs.NotAuthorizedException; import javax.ws.rs.container.ContainerRequestContext;

我正在尝试在我的客户端和Web服务器之间实现rest令牌安全性。我实现了一个过滤器来获取http身份验证头并检查客户端是否有效。虽然,出于某种原因,我的Tomcat在结束和开始时抛出了一个异常

我对过滤器的实现是:

import java.security.Principal;

    import javax.ws.rs.NotAuthorizedException;
    import javax.ws.rs.container.ContainerRequestContext;
    import javax.ws.rs.container.ContainerRequestFilter;
    import javax.ws.rs.core.HttpHeaders;
    import javax.ws.rs.core.Response;
    import javax.ws.rs.core.SecurityContext;
    import javax.ws.rs.ext.Provider;
    import javax.annotation.Priority;
    import javax.ws.rs.Priorities;


        @Secured
        @Provider
        @Priority(Priorities.AUTHENTICATION)
        public class AuthenticationFilter implements ContainerRequestFilter {

            @Override
            public void filter(ContainerRequestContext requestContext) throws IOException {...}
我从Tomcat得到的例外是:

 br 05, 2017 12:09:13 PM org.apache.catalina.core.StandardWrapperValve invoke
    GRAVE: Servlet.service() for servlet [JAX-RS Servlet] in context with path [/My_App] threw exception [Servlet execution threw an exception] with root cause
    java.lang.AbstractMethodError: javax.ws.rs.core.UriBuilder.uri(Ljava/lang/String;)Ljavax/ws/rs/core/UriBuilder;
        at javax.ws.rs.core.UriBuilder.fromUri(UriBuilder.java:120)
        at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:669)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
我有一本书:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>SamuraiForge</groupId>
  <artifactId>0</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  <build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.1</version>
        <configuration>
          <source>1.7</source>
          <target>1.7</target>
        </configuration>
      </plugin>

      <plugin>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.3</version>
        <configuration>
          <warSourceDirectory>WebContent</warSourceDirectory>
          <failOnMissingWebXml>false</failOnMissingWebXml>
        </configuration>
      </plugin>

    </plugins>
  </build>

    <dependencies>

        <dependency>
            <groupId>net.snaq</groupId>
            <artifactId>dbpool</artifactId>
            <version>7.0.1</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.codehaus.jettison/jettison -->
        <dependency>
            <groupId>org.codehaus.jettison</groupId>
            <artifactId>jettison</artifactId>
            <version>1.3.8</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/log4j/log4j -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.8.1</version>
        </dependency>

        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.8.1</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.8.1</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.lmax/disruptor -->
        <dependency>
            <groupId>com.lmax</groupId>
            <artifactId>disruptor</artifactId>
            <version>3.0.0</version>
        </dependency>



        <!-- https://mvnrepository.com/artifact/org.slf4j/log4j-over-slf4j -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>log4j-over-slf4j</artifactId>
            <version>1.7.24</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.24</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-simple</artifactId>
    <version>1.7.24</version>
</dependency>

<!-- https://mvnrepository.com/artifact/postgresql/postgresql -->
<dependency>
    <groupId>postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>9.1-901-1.jdbc4</version>
</dependency>

<!-- https://mvnrepository.com/artifact/com.sun.jersey/jersey-server -->
<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-server</artifactId>
    <version>1.19.3</version>
    <exclusions>
        <exclusion>
            <artifactId>jsr311-api</artifactId>
            <groupId>javax.ws.rs</groupId>
        </exclusion>
    </exclusions>
</dependency>

<!-- https://mvnrepository.com/artifact/com.sun.jersey/jersey-client -->
<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-client</artifactId>
    <version>1.19.3</version>
</dependency>

<!-- https://mvnrepository.com/artifact/com.sun.jersey/jersey-servlet -->
<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-servlet</artifactId>
    <version>1.19.3</version>
</dependency>

<!-- https://mvnrepository.com/artifact/com.sun.jersey/jersey-json -->
<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-json</artifactId>
    <version>1.19.3</version>
</dependency>

<!-- https://mvnrepository.com/artifact/javax.ws.rs/javax.ws.rs-api -->
<dependency>
    <groupId>javax.ws.rs</groupId>
    <artifactId>javax.ws.rs-api</artifactId>
    <version>2.1-m05</version>
</dependency>

<!-- https://mvnrepository.com/artifact/javax.annotation/javax.annotation-api -->
<dependency>
    <groupId>javax.annotation</groupId>
    <artifactId>javax.annotation-api</artifactId>
    <version>1.3</version>
</dependency>


<!-- https://mvnrepository.com/artifact/org.codehaus.jackson/jackson-jaxrs -->
<dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-jaxrs</artifactId>
    <version>1.9.13</version>
</dependency>


<!-- https://mvnrepository.com/artifact/org.codehaus.jackson/jackson-mapper-asl -->
<dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-mapper-asl</artifactId>
    <version>1.9.13</version>
</dependency>

    </dependencies>
</project>

有什么想法吗?

如安德烈亚斯所述,删除

<dependency>
    <groupId>javax.ws.rs</groupId>
    <artifactId>javax.ws.rs-api</artifactId>
    <version>2.1-m05</version>
</dependency>
这就是错误的原因。但你似乎在尝试实际使用它。您使用的ContainerRequestFilter是JAX-RS2.0,但您使用的是Jersey 1.x,即JAX-RS1.x。您不能在JAX-RS1.x中使用一些JAX-RS2API。这包括ContainerRequestFilter


Jersey 1.x有一个过滤器,但API没有什么不同。您可以将其用于Jersey 1.x,但它没有JAX-RS ContainerRequestFilter所具有的一些特性。例如,没有使用Jersey过滤器的SecurityContext这样的概念。因此,您将能够执行SetSecurityContext新建YouSecurityContext。这对您来说可能是个问题,因为看起来这就是您使用过滤器的目的。你需要想出其他方法来做这件事。否则,您将需要完全切换到Jersey 2.x,在那里您可以使用JAX-RS 2

以javax.ws.RS:javar311 api:1.1.1替换javax.ws.RS:javax.RS api:2.1-m05的任何特定原因?这就是我对问题原因的猜测。UriBuilder.uriString的列表如下:2.0。jersey-server-1.19.3.jar提供了UriBuilder的1.1版实现。简而言之,com.sun.jersey:jersey服务器:1.19.3与javax.ws.rs:javax.ws.rs-api的任何2.x版本都不兼容,尽管com.sun.jersey:jersey服务器:1.19。是最新版本的运动衫。那么我该如何解决这个问题呢?我需要使用@NameBinding。它不是。如果您检查Maven存储库,您将看到的新名称,其中最新版本是2.26-b03,它取决于javax.ws.rs:javax.ws.rsAPI:2.1-m05,如您所愿。