访问我的过滤器中的 NameBinding 值
Access NameBinding value inside my filter
我有一个用于我的 REST 服务的过滤器。普通身份验证过滤器。
现在我需要向其中传递一个布尔值。从这个 link 我得到了这一点:
@NameBinding
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(value = RetentionPolicy.RUNTIME)
public @interface AuthenticationFilterBinding {
boolean checkAccountStatus() default true;
}
在我的过滤器实现中,我:
@AuthenticationFilterBinding
@Provider
@Priority(FilterPriority.AUTHENTICATION_PRIORITY)
public class AuthenticationFilter extends AuthenticationAbstractFilter implements ContainerRequestFilter {
private static final Logger logger = LoggerFactory.getLogger(AuthenticationFilter.class);
@Override
public void filter(ContainerRequestContext requestContext) {
// Here I need to check the value of checkAccountStatus() defined in the code above.
// How can I access that value?
// My filter logic goes here
}
}
在我的端点上,我有类似的东西:
@POST
@Path("/photo")
@Consumes(MediaType.MULTIPART_FORM_DATA)
@AuthenticationFilterBinding(checkAccountStatus = false)
@ManagedAsync
public void setUserPhoto(@Suspended AsyncResponse ar, @FormDataParam("image") InputStream fileStream, @HeaderParam(Constant.HEADER_USER_ID) long userId) {
// ...
}
我的问题是我需要检查过滤器中 checkAccountStatus
的值,这就是我的问题,我该如何访问它?
我找到了解决方案:
在过滤器中使用反射来访问值。像这样:
public void filter(ContainerRequestContext requestContext) {
final ExtendedUriInfo extendendUriInfo = (ExtendedUriInfo) requestContext.getUriInfo();
boolean checkAccountStatus = extendendUriInfo
.getMatchedResourceMethod()
.getInvocable()
.getHandlingMethod()
.getAnnotation(AuthenticationFilterBinding.class).checkAccountStatus();
}
希望这对某人有所帮助。
注意,这是使用反射,而反射慢。我不会在大过滤器上使用它(比如身份验证,你几乎可以在任何地方使用的过滤器)......它会减慢你的 app/website.
我最终为那个特定案例创建了一个新过滤器。这是一个权衡。
我有一个用于我的 REST 服务的过滤器。普通身份验证过滤器。
现在我需要向其中传递一个布尔值。从这个 link 我得到了这一点:
@NameBinding
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(value = RetentionPolicy.RUNTIME)
public @interface AuthenticationFilterBinding {
boolean checkAccountStatus() default true;
}
在我的过滤器实现中,我:
@AuthenticationFilterBinding
@Provider
@Priority(FilterPriority.AUTHENTICATION_PRIORITY)
public class AuthenticationFilter extends AuthenticationAbstractFilter implements ContainerRequestFilter {
private static final Logger logger = LoggerFactory.getLogger(AuthenticationFilter.class);
@Override
public void filter(ContainerRequestContext requestContext) {
// Here I need to check the value of checkAccountStatus() defined in the code above.
// How can I access that value?
// My filter logic goes here
}
}
在我的端点上,我有类似的东西:
@POST
@Path("/photo")
@Consumes(MediaType.MULTIPART_FORM_DATA)
@AuthenticationFilterBinding(checkAccountStatus = false)
@ManagedAsync
public void setUserPhoto(@Suspended AsyncResponse ar, @FormDataParam("image") InputStream fileStream, @HeaderParam(Constant.HEADER_USER_ID) long userId) {
// ...
}
我的问题是我需要检查过滤器中 checkAccountStatus
的值,这就是我的问题,我该如何访问它?
我找到了解决方案:
在过滤器中使用反射来访问值。像这样:
public void filter(ContainerRequestContext requestContext) {
final ExtendedUriInfo extendendUriInfo = (ExtendedUriInfo) requestContext.getUriInfo();
boolean checkAccountStatus = extendendUriInfo
.getMatchedResourceMethod()
.getInvocable()
.getHandlingMethod()
.getAnnotation(AuthenticationFilterBinding.class).checkAccountStatus();
}
希望这对某人有所帮助。
注意,这是使用反射,而反射慢。我不会在大过滤器上使用它(比如身份验证,你几乎可以在任何地方使用的过滤器)......它会减慢你的 app/website.
我最终为那个特定案例创建了一个新过滤器。这是一个权衡。