Jersey 在特定资源上跳过筛选

Jersey 在特定资源上跳过筛选,jersey,jetty,Jersey,Jetty,我在Jetty+Jersey中运行了restapi应用程序,所有请求都将通过一些安全过滤器进行过滤,这些过滤器在配置文件中定义了一些排除的路径。使用旧版本Jersey 2.5,API可以正常工作,现在我将Jersey升级到2.22.1,排除的路径也会受到过滤,并且失败,因为没有提供身份验证令牌 这是我的过滤器: @Provider @Priority(Priorities.AUTHENTICATION) public class AuthenticationFilter extends Abst

我在Jetty+Jersey中运行了restapi应用程序,所有请求都将通过一些安全过滤器进行过滤,这些过滤器在配置文件中定义了一些排除的路径。使用旧版本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.
}
}
排除的url路径:

/status,/status/?.*,/version,..
在调试代码时,我注意到对于排除的请求上下文“/myresources/version”,requestContext.getUriInfo().getPath()返回“version”,但是该模式类似于“/version”,因此它不匹配该模式并继续验证过程,并且进一步失败。有人知道它为什么会这样吗

我使用Jersey 2.22.1和jetty maven插件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>
2.22.1
9.2.1.v20140609
javax.ws.rs
javax.ws.rs-api
2.0.1
org.glassfish.jersey.containers
jersey容器servlet
${jersey.version}
org.glassfish.jersey.core
泽西服务器
${jersey.version}
org.glassfish.jersey.core
泽西岛客户
${jersey.version}
org.glassfish.jersey.core
泽西公地
${jersey.version}
org.glassfish.jersey.connectors
泽西码头连接器
${jersey.version}
org.glassfish.jersey.ext
泽西-斯普林3
${jersey.version}
org.glassfish.jersey.media
泽西媒体公司
${jersey.version}
org.glassfish.jersey.media
泽西岛媒体多部分
${jersey.version}
org.glassfish.jersey.connectors
泽西apache连接器
${jersey.version}
org.eclipse.jetty
jetty服务器
${jetty.version}
org.eclipse.jetty
码头servlet
${jetty.version}
org.eclipse.jetty
jetty网络应用程序
${jetty.version}
org.eclipse.jetty
码头
${jetty.version}

您可以使用uriInfo.getAbsolutePath()获取绝对URI,只需进行一些解析即可。或者,您可以使用中提到的其中一种策略来分配要筛选的方法,或者自己打电话,或者您也可以只使用uriInfo.getAbsoluteUri().getPath()
   <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>