安全提供程序会导致 Java 中的类加载器泄漏吗?

2024-03-05

在我的 Java EE (Glassfish 3.1.1) 应用程序中,我注册了一个安全提供程序:

public static final class XoauthProvider extends Provider {
    public XoauthProvider() {
        super("Google Xoauth Provider", 1.0, "Provides the Xoauth experimental SASL Mechanism");
        put("SaslClientFactory.XOAUTH", "blah.server.utils.XoauthSaslClientFactory");
    }
}

...

XoauthProvider xoauthProvider = new XoauthProvider();
Security.addProvider(xoauthProvider);

重新部署后我收到以下异常:

java.lang.IllegalStateException: WEB9031: WebappClassLoader unable to load resource [blah.server.utils.XoauthSaslClientFactory], because it has not yet been started, or was already stopped

我调试了一下,似乎在重新部署后,服务器在加载此类时仍然使用旧的类加载器。

如果我的情况是正确的,并且这是类加载器泄漏,那么在重新部署/取消部署应用程序时取消注册安全提供程序的适当方法是什么?或者我应该在调用最终抛出异常的方法之前手动取消注册/重新注册提供者?

顺便说一句,我正在使用 JRebel。


是的,看来确实有这样的习俗java.security.Provider注册于java.security.Security.addProvider()确实会导致类加载器泄漏,除非注销java.security.Security.removeProvider("providerName")在应用程序关闭时。

我创造了一个专案 https://github.com/mjiderhamn/classloader-leak-prevention/旨在防止类加载器泄漏,其中包括一个测试用例来证明确实存在泄漏。

您可以确保使用清洁剂清洁自己ServletContextListener,详细说明here http://java.jiderhamn.se/2012/01/01/classloader-leaks-ii-find-and-work-around-unwanted-references/#cleanup,或者只是使用我的清理组件(请参阅here http://java.jiderhamn.se/2012/03/04/classloader-leaks-vi-this-means-war-leak-prevention-library/).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

安全提供程序会导致 Java 中的类加载器泄漏吗? 的相关文章

随机推荐

  • HTTP 响应中标头的顺序重要吗?

    标题的顺序是否有意义 A 1 B 2 vs B 2 A 1 我试图弄清楚是否可以使用字典来存储标题列表 或者它是否需要是某种列表或有序字典 不 具有不同名称的标头并不重要 看RFC 2616 https www rfc editor org
  • 使用 Q Promise 进行串行执行

    我想我误解了如何Q https github com kriskowal q承诺工作 我希望我的第一个承诺在下一个承诺开始之前得到解决 但这并没有发生 这是我的代码 var Q require q function doWork taskN
  • Apache Common CLI:如何添加参数?

    我正在将 Common CLI 用于个人项目 我从文档中没有找到的一件事是如何强制呈现某个参数 为了澄清我的问题 我可以定义参数和选项之间的区别 命令 mycommand file txt b 2 mycommand is the comm
  • Windows Phone 7 图像按钮

    我需要为我的应用程序创建一个图像按钮 例如面向网络的风格 我有一个 20x20 像素的图像 并且想要一个与图像尺寸相同的图像按钮 我尝试在我的 xaml 中设置它 但它不起作用
  • 使用 LLVM 将 x86 代码重新编译为更快的 x86

    是否可以输入 x86 32 位代码来运行 LLVM 编译器 有一个巨大的算法 我没有源代码 我想让它在相同的硬件上运行得更快 我可以通过优化将其从 x86 转换回 x86 吗 这段代码运行时间很长 所以我想对其进行静态重新编译 另外 我可以
  • Android——如何允许水平和垂直滚动

    ScrollView 只允许垂直滚动 Horizo ntalScrollView 只允许水平滚动 但两者都没有类 这似乎是 Android 用户界面中一个相当大的缺陷 有什么技巧可以实现这一点吗 Try this
  • 当我们有阻塞调用时,我们应该使用像 spring webflux 这样的反应式堆栈 Web 框架吗?

    我试图了解什么时候我们会使用像 webflux 这样的反应式堆栈框架 我读过的文章似乎表明 当我们有许多阻塞调用时 我们将从反应式方法中受益 例如 如果我们有一个 Webhook 服务 需要调用客户端服务器来更新信息 但我也在这里读过htt
  • 如何使用 jQuery 的锚点设置文本框的值?

    我有一个文本框 我想根据锚标记的内部文本设置其值 换句话说 当有人点击这个锚点时 a href class clickable Blah a 我希望我的文本框填充文本 Blah 这是我当前使用的代码 在我的 html 中 有一个带有 cli
  • Mac (UNIX) 系统上的 PATH 是什么?

    我正在尝试从 git 设置一个项目 Storm https github com nathanmarz storm wiki Setting up development environment https github com natha
  • 使用gdb进行JDK9 Hotspot调试,导致eclipse / Ubuntu终端中出现SIGSEGV分段错误

    我正在尝试调试 JDK9 我想跟踪源代码并查看JDK Hotspot代码的控制流程 我使用 gdb 和 Eclipse 但有一个问题SIGSEGV Segmentation fault 我按照JDK官方文档中的Buildme md来配置JD
  • 在 Symfony 中为 @Route 注释创建自定义需求验证器

    正如你在下面看到的 我的 Route gt requirements下面的正则表达式 我在许多其他控制器 方法中使用它 有点长 看起来不太好并且最重要的是 在语法更新的情况下可能很难维护将来的问题是 我们能做下面这样的事情吗 我见过许多类似
  • 是否可以在 Mac 中构建 UWP 应用程序?

    是否可以在Mac平台上构建UWP应用程序 就像我有 Mac PC 和新的 Visual Studio Code 可以用来编写代码 但是可以安装适用于 Windows 10 UWP 的模拟器和 SDK 吗 我想为 Windows 平台构建应用
  • Asp.net 未从 C# 变量中的 javascript 函数获取值

    这个问题浪费了我很多时间 我已经编写了一个 javascript 函数并为 asp 隐藏字段分配了值 但是当我运行我的应用程序时 我没有获得 c 变量中的值 如果我遗漏了什么 请纠正我 提前致谢 这是我的代码 JavaScript 函数 f
  • 解析工作项查询上的“AssignedTo”中的用户组成员身份

    我将工作项分配给 TFS 中的用户组 比方说 我有一项任务分配给了 Devlopers 组 现在我想设置团队查询 我的任务 以便 开发人员 的每个成员都能看到该任务 我在查询编辑器中尝试了以下运算符 值组合 出于视觉原因添加方括号 分配给
  • 如何在 Spring Boot 应用程序中配置 HikariCP 和 Dropwizard/Coda-Hale 指标

    Reading 说明 https github com brettwooldridge HikariCP wiki Dropwizard Metrics在 HikariCP wiki 上关于如何启用 Dropwizard 指标的信息中 它说
  • 有没有办法使 before_save 有条件?

    我试图在 Rails 应用程序中进行有条件的 before save 操作 但它似乎不起作用 before save method call to run if self related model some method that ret
  • VirtualBox 导入错误 无法注册 DVD 映像

    我正在运行 v 4 2 6 从今天早上开始 我无法导入某些虚拟机 并且我现有的一些虚拟机显示为无法访问 并且 UI 中显示以下错误 当我将虚拟机带到另一台电脑并尝试使用虚拟盒 v 5 0 10 打开它时 也出现同样的错误 无法注册 DVD
  • 从 log4j.Logger 获取 Logger 的通用方法

    而不是在每个类上指定类名 log Logger getLogger Foo class log Logger getLogger Bar class log Logger getLogger Test class 使用可以吗 log Log
  • Spark Dataframe.cache() 更改源的行为

    我的用例 从 cassandra 表创建数据框 通过过滤列并修改该列的值来创建输出数据框 将输出数据帧写入带有 TTL 设置的 cassandra 因此所有修改的记录会在短时间内 2 秒 后被删除 将输出数据帧返回给调用者 在一段时间后将其
  • 安全提供程序会导致 Java 中的类加载器泄漏吗?

    在我的 Java EE Glassfish 3 1 1 应用程序中 我注册了一个安全提供程序 public static final class XoauthProvider extends Provider public XoauthPr