如何使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
,并且启用了包/类路径扫描,它将自动注册