我如何才能为特定请求指定一个过滤器?
How can I specific only one filter for a specific request?
我正在使用 JAX-RX
规范来使用 java 构建 Web 服务。
我正在使用 Filter 进行身份验证和授权,
JAX-RS
为每个请求调用所有过滤器,我不需要那个
我只需要为某个请求指定一个过滤器
我怎样才能做到这一点 ?
我只想阻止另一个过滤器调用。
我不使用 web.xml
,我正在使用 RootClass
extend Application
Class with @ApplicationPath
annotation 像这样:
@ApplicationPath("api")
public class RootEndPoint extends Application {
}
我明白了。
这是我的问题
我会回答的,因为以后有人需要它。
如果你想阻止一些过滤器,你可以通过执行以下步骤使用@NameBinding Annotation:
假设我们有两个过滤器:ManagerUserFilter
和 NormalUser
我想以管理员身份登录,我不想 NormalUserFilter
被叫到
请按照以下步骤操作:
1- 创建注释并使用这些注释:
@NameBinding
@Target({TYPE,METHOD})
@Retention(value = RetentionPolicy.RUNTIME)
public @interface ManagerFilterResources {}
2- 在 ManagerUserFilter
中使用此注解,就像这样:
@Provider
@ManagerFilterResources
public class ManagerUserFilter implements ContainerRequestFilter,ContainerResponseFilter {
// implementation abstract method in Containers
}
3 - 在 ManagerResource
class 中像这样使用此注释
@ManagerFilterResources
@Path("/manager")
public class ManagerResource {
注意:如果您只想在一种方法上应用过滤器,也可以在方法上使用此注释。
4 - 像第一步一样为 NormalUserFilter
创建另一个注释,并将其命名为 NormalUser 作为示例,并像这样在 NormalUserFilter 中使用它:
@NameBinding
@Target({TYPE,METHOD})
@Retention(value = RetentionPolicy.RUNTIME)
public @interface NormalUser {}
并在过滤器中使用它
@Provider
@NormalUser
public class NormalUserFilter implements ContainerRequestFilter, ContainerResponseFilter {
// implementation abstract method in Containers
如果您转到 /manager
url NormalUserFilter 将不会被调用
希望这个回答对你有用。
我正在使用 JAX-RX
规范来使用 java 构建 Web 服务。
我正在使用 Filter 进行身份验证和授权,
JAX-RS
为每个请求调用所有过滤器,我不需要那个
我只需要为某个请求指定一个过滤器
我怎样才能做到这一点 ?
我只想阻止另一个过滤器调用。
我不使用 web.xml
,我正在使用 RootClass
extend Application
Class with @ApplicationPath
annotation 像这样:
@ApplicationPath("api")
public class RootEndPoint extends Application {
}
我明白了。
这是我的问题
我会回答的,因为以后有人需要它。
如果你想阻止一些过滤器,你可以通过执行以下步骤使用@NameBinding Annotation:
假设我们有两个过滤器:ManagerUserFilter
和 NormalUser
我想以管理员身份登录,我不想 NormalUserFilter
被叫到
请按照以下步骤操作:
1- 创建注释并使用这些注释:
@NameBinding
@Target({TYPE,METHOD})
@Retention(value = RetentionPolicy.RUNTIME)
public @interface ManagerFilterResources {}
2- 在 ManagerUserFilter
中使用此注解,就像这样:
@Provider
@ManagerFilterResources
public class ManagerUserFilter implements ContainerRequestFilter,ContainerResponseFilter {
// implementation abstract method in Containers
}
3 - 在 ManagerResource
class 中像这样使用此注释
@ManagerFilterResources
@Path("/manager")
public class ManagerResource {
注意:如果您只想在一种方法上应用过滤器,也可以在方法上使用此注释。
4 - 像第一步一样为 NormalUserFilter
创建另一个注释,并将其命名为 NormalUser 作为示例,并像这样在 NormalUserFilter 中使用它:
@NameBinding
@Target({TYPE,METHOD})
@Retention(value = RetentionPolicy.RUNTIME)
public @interface NormalUser {}
并在过滤器中使用它
@Provider
@NormalUser
public class NormalUserFilter implements ContainerRequestFilter, ContainerResponseFilter {
// implementation abstract method in Containers
如果您转到 /manager
url NormalUserFilter 将不会被调用
希望这个回答对你有用。