如何使ContainerRequestFilter过滤多个注释,但在Java中一次过滤1个注释?

如何使ContainerRequestFilter过滤多个注释,但在Java中一次过滤1个注释?,java,jakarta-ee,jersey,jax-rs,jersey-2.0,Java,Jakarta Ee,Jersey,Jax Rs,Jersey 2.0,我制作了一个ContainerRequestFilter,但是当我添加两个注释时,为了在任何方法上调用它,该方法都需要两个注释。我想要的是: 提供者: @TypeA @TypeB @Provider @Priority( Priorities.AUTHENTICATION ) public class AuthenticationFilter implements ContainerRequestFilter { ... } 某些被筛选的类: @Path( "/test" ) public c

我制作了一个
ContainerRequestFilter
,但是当我添加两个注释时,为了在任何方法上调用它,该方法都需要两个注释。我想要的是:

提供者:

@TypeA
@TypeB
@Provider
@Priority( Priorities.AUTHENTICATION )
public class AuthenticationFilter implements ContainerRequestFilter
{ ... }
某些被筛选的类:

@Path( "/test" )
public class TestStuff
{
    @POST
    @Produces( MediaType.APPLICATION_JSON )
    @Path( "auth" )
    @TypeA
    public Response login() { ... }

    @POST
    @Produces( MediaType.APPLICATION_JSON )
    @Path( "auth" )
    @TypeB
    public Response somethingElse() { ... }

}
但这是行不通的。只有我这样做了,它才会起作用:

@Path( "/test" )
public class TestStuff
{
    @POST
    @Produces( MediaType.APPLICATION_JSON )
    @Path( "auth" )
    @TypeA
    @TypeB
    public Response login() { ... }

    @POST
    @Produces( MediaType.APPLICATION_JSON )
    @Path( "auth" )
    @TypeA
    @TypeB
    public Response somethingElse() { ... }

}
如何对类型中的“或”进行筛选匹配?

您可以使用。您只需要实现一个
DyanamiCFeature
,并检查该方法是否具有注释,以确定是否应该为该方法注册过滤器

public class AuthDynamicFeature implements DynamicFeature {

    @Override
    public void configure(ResourceInfo info, FeatureContext context) {
        Method method = info.getResourceMethod();
        if (method.isAnnotationPresent(TypeA.class)
            || method.isAnnotationPresent(TypeB.class)) {

            context.register(new AuthenticationFilter());
            // or context.register(AuthenticationFilter.class);
        }
    }
}
然后只需向应用程序注册该功能。或者,如果您在功能上添加了
@Provider
,并且启用了包/类路径扫描,它将自动注册。

而不是,您可以使用。您只需要实现一个
DyanamiCFeature
,并检查该方法是否具有注释,以确定是否应该为该方法注册过滤器

public class AuthDynamicFeature implements DynamicFeature {

    @Override
    public void configure(ResourceInfo info, FeatureContext context) {
        Method method = info.getResourceMethod();
        if (method.isAnnotationPresent(TypeA.class)
            || method.isAnnotationPresent(TypeB.class)) {

            context.register(new AuthenticationFilter());
            // or context.register(AuthenticationFilter.class);
        }
    }
}
然后只需向应用程序注册该功能。或者,如果您在功能上添加了
@Provider
,并且启用了包/类路径扫描,它将自动注册