拦截JAX-RS请求:向tomcat注册ContainerRequestFilter

2023-11-23

我正在尝试通过 ContainerRequestFilter 拦截对我的 JAX-RS Web 服务的请求。我想将它与自定义注释一起使用,这样我就可以装饰 Web 服务的某些方法。这应该使我能够根据是否在安全通道上发出的信息来处理对此方法的请求 或不,在执行实际方法之前。

我尝试了不同的方法,搜索了几篇文章,然后主要根据奥尔登在这篇文章中的回答来实施post。 但我无法让它工作。

我的 web 服务中有一个用我的自定义注释 Ssl 装饰的方法测试。

@POST
@Path("/test")
@Ssl
public static Response test(){      
    System.out.println("TEST ...");
}

注释看起来像这样:

@NameBinding
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.TYPE, ElementType.METHOD })
public @interface Ssl {}

然后我设置了一个过滤器实现

import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerRequestFilter;
import javax.ws.rs.ext.Provider;

@Ssl
@Provider
public class SslInterceptor implements ContainerRequestFilter
{
    @Override
    public void filter(ContainerRequestContext requestContext) throws IOException
    {       
        System.out.println("Filter executed.");
    }
}

但过滤器永远不会执行,也不会出现任何错误消息或警告。无论如何,测试方法运行良好。

为了解决这个问题,我尝试按照描述在 web.xml 中注册过滤器here.

<servlet>
    <servlet-name>Jersey Web Application</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>

    <init-param>
      <param-name>com.sun.jersey.config.property.resourceConfigClass</param-name>
      <param-value>com.sun.jersey.api.core.PackagesResourceConfig</param-value>
    </init-param>

    <init-param>
      <param-name>com.sun.jersey.config.property.packages</param-name>
      <param-value>com.my.packagewithfilter</param-value>
    </init-param>

    <init-param>
        <param-name>com.sun.jersey.spi.container.ContainerRequestFilters</param-name>
        <param-value>com.my.packagewithfilter.SslInterceptor</param-value>
    </init-param>

    <init-param>  
      <param-name>jersey.config.server.provider.packages</param-name>  
      <param-value>com.my.packagewithfilter</param-value>
    </init-param>    

  </servlet>

但这也行不通。我缺少什么?有什么想法可以让过滤器发挥作用吗?非常感谢任何帮助!


您在类中使用 JAX-RS 2.0 API(请求过滤器、名称绑定等),但在您的类中使用 Jersey 1 专有的初始化参数web.xml(包开头为com.sun.jersey, 球衣2用途org.glassfish.jersey)。看看这个answer以及在这些文章中:

  • 在 Jersey 2 中注册资源和提供者
  • 将 JAX-RS 提供者绑定到资源方法
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

拦截JAX-RS请求:向tomcat注册ContainerRequestFilter 的相关文章

随机推荐

  • Android MediaPlayer:基于 URI 播放 Raw 音频资源

    我试图解决的问题是在一个需要播放音频文件的活动中 大多数文件将由用户创建 并保存到外部存储中 因此使用以下代码播放 基于 Google 的示例代码 MediaPlayer mPlayer new MediaPlayer mPlayer se
  • python manage.py runserver、shell、dbshel​​l 在 git-bash 上冻结

    我试图在 Windows 的 git bash 上的 python virtualenv 中运行交互式 shell 但它没有运行 奇怪的是 它似乎没有做任何事情 只是光标在下一行上闪烁 没有给出任何输出 python manage py s
  • 如何在 EPPlus 中将数据透视表报表布局设置为表格?

    查看 EPPlus 附带的示例 我已成功创建数据透视表 但无法为其设置正确的报告布局 我希望它是 表格 而不是 轮廓 或其他什么 对我来说 EPPlus 现在似乎不支持这一点 但也许我错过了一些东西 事实证明 这比我想象的要容易得多 通过将
  • Android WebView:按钮响应非常滞后

    我制作了一个小网络应用程序来使用 Android 的 WebView 功能 我有一些用作按钮的 div 带有onclick属性 尝试该应用程序后 在设备的浏览器中 我立即注意到点击按钮后有很大的延迟 当我点击按钮和浏览器在其周围显示橙色突出
  • Python:停止正在等待用户输入的线程

    我试图让我的脚本在用户按下返回键时触发用户输入 然后主程序将检查 txUpdated 标志并使用该输入 我有一个在 python 中运行的线程 它只是等待用户输入 class InputThread threading Thread def
  • Eclipse IDE 支持 JSF 2.0 吗?

    我安装了 WTP 3 1 插件 还安装了 Glassfish v3 插件 我可以注册我的服务器 当我创建动态 Web 项目时 我可以看到可用的最大动态 Web 模块版本是 2 5 然后 我选择 Glassfish v3 的默认配置 但是当我
  • pandas if else 条件多列[重复]

    这个问题在这里已经有答案了 假设我有以下 df import pandas as pd data dic a 0 0 1 2 b 0 3 4 5 c 6 7 8 9 df pd DataFrame data dic Result a b c
  • 如何使用 R 调用/执行 imageJ 宏?

    我在 imageJ 中编写了一个宏 它会输出一个数据帧 然后在 R 中对其进行分析 我希望能够在 R 中完成整个过程 而不必先在 imageJ 中手动运行该宏 目前 宏会提示用户输入和输出目录 然后执行操作 我想 R 中一定有一个函数可以让
  • 在 Eclipse 中生成 JavaDocs 时出现“找不到模块”消息

    我正在尝试在我的应用程序中生成 JavaDocs 但是 当我尝试时 我收到以下消息 application src module info java 5 error module not found javafx base requires
  • 无法使用 exoPlayer 2.11 播放 MKV Matroska 视频

    当我尝试播放时在我的视频播放器中MKV Matroska文件保持静止 视频未播放 我跟着CodeLabs and ExoPlayer开发并构建可以播放的播放器 MP4但无法播放 MKV 这是我的播放器 exoplayer 2 11 5 pr
  • Pandas pd.Series.isin 集合与数组的性能

    一般来说 在 Python 中 可哈希集合的成员资格最好通过以下方式进行测试set 我们知道这一点是因为散列的使用为我们提供了 O 1 查找复杂度 而对于list or np ndarray 在 Pandas 中 我经常需要检查非常大的集合
  • System.Diaganostics.Process.Id 与任务管理器中显示的进程 ID 不同。为什么?

    我正在使用 C System Diagnostic Process object 它的属性之一是Id The Id这产生的与PID 如图所示Windows Task Manager 为什么是这样 你看 一旦这个过程开始 它启动了另外两个非托
  • 有没有一种简单的方法可以将相机的 onPreviewFrame 中的字节数组转换为 android 中的图片?

    我问是否有一个简单的方法 因为有一个谷歌问题报告说使用decodeByteArray是不可能的 但该报告起源于 2008 年 我希望那里没有发布解决方案 问题报告中列出的方法是自己解码格式 但我不想将其放入并减慢程序速度 任何帮助将不胜感激
  • 如何扩展 Node.js WebSocket Redis 服务器?

    我正在编写一个聊天服务器Acani 我有一些问题扩展 Node js and 具有负载均衡器可扩展性的 websocket Node js 负载均衡究竟意味着什么 这是否意味着会有n我的服务器应用程序运行的独立版本 每个版本都在单独的服务器
  • 登录成功后如何重定向到页面?

    我对 Web 表单开发相当陌生 正在尝试使用 VS 2010 中的 ASP NET Web 应用程序模板创建的项目 用户成功登录后 我希望将用户重定向到我创建的页面 如何修改我的项目以在登录后重定向用户 任何示例 教程 等都非常感谢 Tha
  • Base91,是怎么计算的?

    我一直在网上查找 basE91 是如何计算的 我找到了诸如this one它指定了用于特定值的字符 但我没有找到如何获取该值的方法 我尝试将输入值更改为二进制并获取 6 位和 7 位的块 但这些不起作用 并且我得到了不正确的输出 我不想要为
  • 有没有类似 GhostDoc 的 C++ 工具

    当我使用 C 进行开发时 我大量使用 GhostDoc 来加快代码注释的过程 我目前正在开发一个 C 项目 但尚未找到等效的工具 我了解 Doxygen 但据我所知 它用于在代码外创建文档 而不是在代码中创建注释 有没有好的等效工具 我更喜
  • WPF:如何循环浏览窗口中的所有控件?

    如何循环遍历 WPF 窗口中的所有控件 我在MSDN 文档所以这有帮助 Enumerate all the descendants of the visual object static public void EnumVisual Vis
  • ImageIO.read() 返回 403 错误

    我有以下代码 public BufferedImage urlToImage String imageUrl throws MalformedURLException IOException URL url new URL imageUrl
  • 拦截JAX-RS请求:向tomcat注册ContainerRequestFilter

    我正在尝试通过 ContainerRequestFilter 拦截对我的 JAX RS Web 服务的请求 我想将它与自定义注释一起使用 这样我就可以装饰 Web 服务的某些方法 这应该使我能够根据是否在安全通道上发出的信息来处理对此方法的