当前位置: 首页 > 知识库问答 >
问题:

如何从泽西过滤器中排除某些url?

百里成仁
2023-03-14
@Provider
public class AuthFilter implements ContainerRequestFilter{

    @Override
    public void filter(ContainerRequestContext requestContext) throws IOException {

// business logic

   }
}

共有1个答案

羊舌高爽
2023-03-14

您可以考虑使用名称绑定筛选器来选择您的筛选器将绑定到的endpoint,而不是从全局筛选器中排除URI。

对于一些带有名称绑定筛选器的示例,也请查看此答案。

如果您仍然喜欢全局筛选方法,可以考虑使用uriinfo接口来获取关于所请求URI的详细信息。使用以下方法之一获取uriinfo的实例:

@Provider
public class AuthFilter implements ContainerRequestFilter {

    @Context
    private UriInfo info;

    @Override
    public void filter(ContainerRequestContext requestContext) throws IOException {
        ...
    }
}
@Override
public void filter(ContainerRequestContext requestContext) throws IOException {
    UriInfo info = requestContext.getUriInfo();
    ...
}
    null
@Override
public void filter(ContainerRequestContext requestContext) throws IOException {
    UriInfo info = requestContext.getUriInfo();
    if (!info.getPath().contains("secured")) {
        return;
    }
}

另一种方法是动态绑定。它允许您以动态的方式为资源方法分配过滤器和拦截器。上面提到的名称绑定使用静态方法,对绑定的更改需要更改源代码和重新编译。通过动态绑定,您可以实现在应用程序初始化期间定义绑定的代码。

下面摘自Jersey文档的示例展示了如何实现动态绑定:

@Path("helloworld")
public class HelloWorldResource {

    @GET
    @Produces("text/plain")
    public String getHello() {
        return "Hello World!";
    }

    @GET
    @Path("too-much-data")
    public String getVeryLongString() {
        String str = ... // very long string
        return str;
    }
}
// This dynamic binding provider registers GZIPWriterInterceptor
// only for HelloWorldResource and methods that contain
// "VeryLongString" in their name. It will be executed during
// application initialization phase.
public class CompressionDynamicBinding implements DynamicFeature {

    @Override
    public void configure(ResourceInfo resourceInfo, FeatureContext context) {
        if (HelloWorldResource.class.equals(resourceInfo.getResourceClass())
                && resourceInfo.getResourceMethod().getName().contains("VeryLongString")) {
            context.register(GZIPWriterInterceptor.class);
        }
    }
}

绑定是使用实现DynamicFeature接口的提供程序完成的。该接口定义了一个带有两个参数configure方法,resourceinfofeaturecontext

 类似资料:
  • 在Jersey 1.x中,我们从一个(Jersey)会话属性访问Wicket会话,如这里https://stackoverflow.com/a/15767824/1399659.所述 在迁移到Jersey 2.x时,使用ContainerRequestFilter似乎是合适的模式,它还允许Springbean注入。我们通过包括 作为 Servlet 容器的初始化参数,并在容器请求筛选实现上使用@P

  • ExtendedService内部: 但是当我开始时,我得到无效的Bean定义,因为myService是绑定错误。如何排除原来的MyService? 例外情况: 原因:org.springframework.beans.factory.support.beandefinitionoverrideException:URL[file:svc.xml]中定义的名为“My Service”的bean定义

  • 如何防止用户在“JTextField”中输入某些字符,如果输入该字符,则不要在文本字段中显示它

  • 我正在使用Android Studio和Google Drive,这会使隐藏的系统文件可见(例如图标和桌面ini),导致错误,如本文所述。我希望指示gradle 2.14忽略它们,而不是运行脚本来删除这些文件。 为了找出如何排除文件,我在目录和中创建了名为“excludeme.txt”的文件。我尝试对项目中的两个文件进行各种修改,但没有成功排除该文件。 具体来说,我对的文件进行了以下修改: 我还将

  • 我有灰熊提供的球衣。 我有一个实现类。但是,为所有传入请求创建一次此类。因此,这样做: 为空。我可以将上下文注入到被调用的实际endpoint中,但这相当粗糙和丑陋,对我来说真的没有用;因为我希望记录各种请求。理想情况下,希望在请求的ResponseFilter端找到这个对象。 必须有一种简单的方法来做到这一点。到目前为止,我看到的所有问题/答案都不适用于灰熊,或者注入了RESTendpoint调

  • 本文向大家介绍从MySQL的SHOW COLUMNS中排除某些列?,包括了从MySQL的SHOW COLUMNS中排除某些列?的使用技巧和注意事项,需要的朋友参考一下 让我们首先创建一个演示表 现在,您可以在desc命令的帮助下检查表的描述。查询如下- 以下是输出 这是从SHOW COLUMNS中排除某些列的查询。您需要排除“ StudentAge”和“ StudentMarks”列。查询如下-