当前位置: 首页 > 面试题库 >

在Jersey生命周期中,一个人如何拦截请求?

湛文乐
2023-03-14
问题内容

我已经用了一年多的时间来使用Jersey,但偶然发现了一个我找不到答案的问题:如何截获(或连接)Jersey请求的生命周期?

理想情况下,我将能够在容器从网络接受请求的时间到调用处理程序方法的时间之间执行一些自定义过滤/验证/拒绝。如果有一种简单的方法可以按子路径过滤拦截器(例如,在/下有一个拦截器,在/
user /下有另一个拦截器,等等),则可以加分。

谢谢!

编辑:为了更清楚一点,此处的总体思路是能够编写一些可用于许多API调用的代码,而不必从每个处理程序方法中显式调用该代码。这将减少额外的代码,并消除了传递请求上下文的需要。


问题答案:

我找到了答案。

首先,创建一个实现ContainerRequestFilter的类。该接口指定以下方法,在该方法中进行过滤。ContainerRequest对象包含有关当前请求的信息。

public ContainerRequest filter(ContainerRequest req);

之后,在web.xml的servlet配置中包含以下XML

<init-param>
  <param-name>com.sun.jersey.spi.container.ContainerRequestFilters</param-name>
  <param-value>path.to.filtering.class</param-value>
</init-param>

资料来源:

http://jersey.576304.n2.nabble.com/ContainerRequestFilter-and-Resources-
td4419975.html

http://markmail.org/message/p7yxygz4wpakqno5



 类似资料:
  • 我在我的项目中使用。所有POST数据都以格式发送,并在服务器端解编入各自的bean中。类似于这样: 向服务器发送请求: 我从这里得到了REST拦截器的实现。 我想访问拦截器中的有效载荷(请求体)。由于数据是JSON格式的,因此不能作为请求参数访问。是否有一种方法可以在拦截器方法中获得请求正文?请指教。

  • 每个请求对象只在一个 servlet 的 service 方法的作用域内,或过滤器的 doFilter 方法的作用域内有效,除非该组件启用了异步处理并且调用了请求对象的 startAsync 方法。在发生异步处理的情况下,请求对象一直有效,直到调用 AsyncContext 的 complete 方法。容器通常会重复利用请求对象,以避免创建请求对象而产生的性能开销。开发人员必须注意的是,不建议在上

  • 问题内容: 我在我的项目中使用。所有POST数据都以格式发送,并在服务器端解组到各自的bean中。像这样: 向服务器发送请求: 有效负载: 服务器端: MangaBean: 在控制台上输出: 我从这里获得了REST-interceptor实现。 我想访问拦截器中的有效负载(请求主体)。由于数据为JSON格式,因此无法将其作为请求参数进行访问。 有没有办法在拦截器方法中获取请求正文? 请指教。 问题

  • 注:本文档提供的生命周期指的是 Universal App 的生命周期,它依赖 rax-app 提供的 runApp方法。 App 级生命周期 launch  在 App 启动时触发 使用生命周期 你可以使用 rax-app 提供的 useAppLaunch 来注册 App 级别的生命周期。 示例: import { useAppLaunch } from 'rax-app'; useAppLa

  • 我们大致为WebAPplication设计了4个生命周期: 请求初始化其实就是从URL中解析提取出{module}, {action}, {method}; 然后再根据{module}, {action}, {method}找到对应的Controller文件; 然后再调用对应的{method},完了之后再发送响应。当然响应的过程中肯定是要顺带着解析下模板标签啦。 恩,这就完了,貌似感觉很简单啊。

  • 如下图. 可以看出,基本周期是: created mounted updated (update 可以理解成人肉手动操作触发) destroyed 上面步骤中的 1,3,4都是自动触发。 每个步骤都有对应的 beforeXyz方法 所以, 我们一般使用mounted 作为页面初始化时执行的方法