泽西跳过特定资源的过滤

时间:2016-02-27 05:02:28

标签: jersey jetty

我在Jetty + Jersey中运行REST API应用程序,所有请求都将被一些安全过滤器过滤,这些过滤器提供了一些在配置文件中定义的排除路径。使用旧版本的Jersey 2.5 API工作正常,现在我将Jersey升级到2.22.1,排除的路径也会受到过滤而失败,因为没有提供身份验证令牌。

这是我的过滤器:

@Provider
@Priority(Priorities.AUTHENTICATION)
public class AuthenticationFilter extends AbstractAuthenticationFilter implements ContainerRequestFilter, DynamicFeature { 
...
@Override
    public void filter(ContainerRequestContext requestContext) throws IOException {

   if (getExcludeUrlPatterns() != null) {
            for (String urlPattern : getExcludeUrlPatterns()) {
                Pattern p = Pattern.compile(urlPattern);
                Matcher m = p.matcher(requestContext.getUriInfo().getPath()); <-- here went wrong
                if (m.matches()) {
                    // skip filtering
                }
            }
        }

        // continue filtering.
}
}

这是我的资源:

@Path("/version")
public class VersionResource {
   ... 
   @GET
    @ResponseClass(AppVersion.class)
    public Response getVersion() {
        AppVersion version =
                new AppVersion()
                        .withBuildPlan(BUILD_PLAN_SETTING)
                        .withBuildNumber(BUILD_NUMBER_SETTING)
                        .withBuildTimestamp(BUILD_TIMESTAMP_SETTING)
        return Response.ok(version).build();
    }
}

排除的网址路径:

/status,/status/?.*,/version,..

当我调试代码时,我注意到排除的请求上下文&#34; / myresources / version&#34;,requestContext.getUriInfo()。getPath()返回&#39;版本&#39;,但模式就像&#39; / version&#39;,因此它不匹配模式并继续身份验证过程,并且进一步失败。任何人都明白为什么它会像这样?

我使用Jersey 2.22.1和jetty-maven-plugin 9.2.1.v20140609,这是我的pom.xml

   <jersey.version>2.22.1</jersey.version>
    <jetty.version>9.2.1.v20140609</jetty.version>
<dependency>
  <groupId>javax.ws.rs</groupId>
  <artifactId>javax.ws.rs-api</artifactId>
  <version>2.0.1</version>
</dependency>

<dependency>
  <groupId>org.glassfish.jersey.containers</groupId>
  <artifactId>jersey-container-servlet</artifactId>
  <version>${jersey.version}</version>
</dependency>

<dependency>
  <groupId>org.glassfish.jersey.core</groupId>
  <artifactId>jersey-server</artifactId>
  <version>${jersey.version}</version>
</dependency>

<dependency>
  <groupId>org.glassfish.jersey.core</groupId>
  <artifactId>jersey-client</artifactId>
  <version>${jersey.version}</version>
</dependency>

<dependency>
  <groupId>org.glassfish.jersey.core</groupId>
  <artifactId>jersey-common</artifactId>
  <version>${jersey.version}</version>
</dependency>

<dependency>
  <groupId>org.glassfish.jersey.connectors</groupId>
  <artifactId>jersey-jetty-connector</artifactId>
  <version>${jersey.version}</version>
</dependency>

<dependency>
  <groupId>org.glassfish.jersey.ext</groupId>
  <artifactId>jersey-spring3</artifactId>
  <version>${jersey.version}</version>
</dependency>

<dependency>
  <groupId>org.glassfish.jersey.media</groupId>
  <artifactId>jersey-media-json-jackson</artifactId>
  <version>${jersey.version}</version>
</dependency>

<dependency>
   <groupId>org.glassfish.jersey.media</groupId>
   <artifactId>jersey-media-multipart</artifactId>
   <version>${jersey.version}</version>
</dependency>

<dependency>
  <groupId>org.glassfish.jersey.connectors</groupId>
  <artifactId>jersey-apache-connector</artifactId>
  <version>${jersey.version}</version>
</dependency>
<dependency>
  <groupId>org.eclipse.jetty</groupId>
  <artifactId>jetty-server</artifactId>
  <version>${jetty.version}</version>
</dependency>
<dependency>
  <groupId>org.eclipse.jetty</groupId>
  <artifactId>jetty-servlet</artifactId>
  <version>${jetty.version}</version>
</dependency>
<dependency>
  <groupId>org.eclipse.jetty</groupId>
  <artifactId>jetty-webapp</artifactId>
  <version>${jetty.version}</version>
</dependency>

<dependency>
  <groupId>org.eclipse.jetty</groupId>
  <artifactId>jetty-util</artifactId>
  <version>${jetty.version}</version>
</dependency>

0 个答案:

没有答案