我创建了一个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() { ... }
}
如何使过滤器匹配类型的“OR”?
最佳答案
而不是 Name Binding ,您可以使用 Dynamic Binding 。您只需要实现一个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
,并且启用了包/类路径扫描,它将自动注册。
关于java - 如何让 ContainerRequestFilter 过滤多个注释,但在 Java 中一次过滤 1 个注释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44465282/