在 Servlet 中使用 CDI 注入

2024-02-16

我正在尝试@Inject a @SessionScoped将 bean 放入过滤器

@WebFilter("/*")
public class IdentityFilter implements Filter, Serializable {

    @Inject
    private LoginUser loginUser;
...

where LoginUser is @SessionScoped

LoginUser 的目的是代表会话的登录用户。

问题是我似乎并不总是得到loginUser从当前会话开始,我在会话之间出现“泄漏”,因为一个会话的 LoginUser 对象正在与另一个会话共享。显然这不好。

我想知道这是否是因为Filter对象是单例,或者至少由容器(glassfish)在请求和会话之间重用。 (正确的?)

有没有更好的方法来获取LoginUser当前会话的对象而不使用过滤器上的属性?


我的问题是容器中只有一个 Filter 实例,实际上是一个单例。似乎 CDI 在第一次使用时将第一个会话级对象注入到 Filter 中,然后 Filter 永远存储该引用,即使对于其他会话也是如此。

我找到了这个解决方案,注入一个工厂对象(实例),我可以在每次过滤器运行时使用它来获取会话实例,即

 @WebFilter("/*")
 public class IdentityFilter implements Filter, Serializable {

      @Inject 
      private Instance<LoginUser> loginUserSource;

And in

 @Override
 public void doFilter(...)
      LoginUser login   = loginUserSource.get();

这似乎解决了我的问题。

Thanks

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

在 Servlet 中使用 CDI 注入 的相关文章

随机推荐

  • 在 Twitter Bootstrap 中,如何解除模式对话框关闭事件的绑定?

    我有一个函数绑定到隐藏模式对话框的操作 我使用的代码类似于已接受的答案this https stackoverflow com questions 8363802 bind a function to twitter bootstrap m
  • 如何在 Excel 中绕过 64k 行限制

    我希望允许用户操作可能有多达 400 000 行的表 每行约 200 个字符 最大数据总量为 80MB 作为第一个近似值 我正在考虑以某种方式为用户提供一个 csv 文件以粘贴到电子表格中 首先 尝试这样的事情是否有实际意义 例如 一个电子
  • Flutter:在底部导航栏上显示模态底部表单/替换底部导航栏(无障碍)

    我正在尝试为我自己的 Flutter 应用程序复制一些类似于 Google 地图的功能 同样基于地图 我希望用户能够选择兴趣点并可以选择导航到该位置 当他们点击 导航 时 我希望底部工作表出现在现有底部导航栏的位置 或顶部 用于基于选项卡的
  • 放大画布而不修改特定子控件的大小

    所以我意识到我正在冒险超出 Canvas 的预期用途 并且可能不得不想出一个更加手动的解决方案 然而 由于在 WPF 方面没有太多经验 我希望可能有一些解决方案可以让我继续使用 Canvas 控件及其免费提供的功能 该问题围绕用于放大和缩小
  • C# 项目的目标是“.Net Framework,版本=v4.5”,该计算机未安装[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 今天下午我正在使用 Windows 8 上安装的 VS 2012 开发一个 C 项目 它运行良好 我在回家之前将代码上传到 TFS 但是当我
  • Python多处理,无法pickle thread.lock(pymongo)

    我有一个具有以下方法的类 def get add new links self max num links self get links m2 max num links processes mp cpu count pool mp Poo
  • iOS 应用程序如何安装在设备上

    我有兴趣了解 iOS 应用程序如何安装在设备上的技术细节 我来解释一下我的情况 我的应用程序的 ipa 和 plist 在服务器上 我制作了一个使用 itms services 指向 plist 文件的下载网页 我尝试在我朋友的 iPhon
  • 石英 2D 中的“斜角”形状

    我熟悉 Quartz 2D 绘图的一些基础知识 例如绘制基本形状和渐变等 但我不确定如何绘制具有 斜角 外观的形状 如下所示 斜角圆 http www shaggyfrog com junk beveled circle jpg http
  • HttpContext.Current.Session 为空

    我有一个网站 在类库内有一个自定义缓存对象 所有项目都运行 NET 3 5 我想将此类转换为使用会话状态而不是缓存 以便在应用程序回收时保留状态服务器中的状态 但是 当我访问 Global asax 文件中的方法时 此代码会引发异常 Htt
  • javax.validation.NotBlank 缺少验证器

    我要求在公共 api 模块 多模块项目 中我不能使用任何类型的 hibernate 验证注释 所以我确实使用了 javax validation 中的一个 这是可以接受的 当我想验证包含 NotBlank 注释的域对象 我使用 vaadin
  • vertica-python 复制本地时出错

    我用这个代码 复制本地 在Python上垂直7 1 conn info host 192 168 1 1 port 5433 user dbadmin password xxxxxx database db connection verti
  • 如何使用 Koa 提供静态文件?

    我想在我的项目中实现通用链接 并且需要通过 Koa 提供 json 这是一个名为苹果应用程序站点关联 我的文件位于 assets apple app site association apple app site association f
  • 最小化窗口驱动程序selenium excel vba

    我已经搜索了很多方法来最小化 excel vba 的 selenium 中的驱动程序窗口 我已经找到了 Java 和 python 的方法并尝试采用它们 但我所有的尝试都失败了 我刚刚找到了一种使用最大化窗口的方法 bot Window M
  • 导入头文件的问题

    我正在将 Objective C 项目导入到我的 swift 项目中 我已经创建了桥接头并在 构建设置 下设置了路径 我已将搜索路径设置为头文件和库 问题是找不到我的头文件 当我构建时 找不到导入中的第二行 import VuforiaOb
  • 开发通用 Android 应用程序(手机和平板电脑)

    我正在开发一个通用的 Android 应用程序 我需要检查该应用程序是否在平板电脑或手机中运行 有什么方法可以做到吗 您可以检查Android 版 Google I O 应用程序 http code google com p iosched
  • 为什么 select2-removing 事件在带有allowClear的select2中没有触发?

    我想在我的中挂钩一个事件select2 http ivaynberg github io select2 documentation一旦它被清除 select2 初始化为allowClear true 然而事件 select on sele
  • Ionic 应用程序适用于 ios,但不适用于 Android

    我的应用程序可以在 ios 设备上与 ionicserve ionicview 和 ionicbuildios 配合使用 我的应用程序也可以在 Android 上的 ionic 视图中正常工作 但是 当我运行 ionic run andro
  • 在heroku上运行loaddata而不将数据文件添加到存储库

    我需要运行一个manage py loaddata命令将一些数据导入到我的heroku实例的数据库中 而heroku的ethereal文件系统在这方面出现了一些问题 我真的不想将数据文件添加到我的heroku存储库中 并在每次我想运行loa
  • Java:d​​ouble:如何始终显示两位小数

    我在项目中使用双精度值 并且我希望始终显示前两位小数 即使它们为零 我使用此函数进行舍入 如果我打印的值是 3 47233322 它 正确地 打印 3 47 但是 例如 当我打印值 2 时 它会打印 2 0 public static do
  • 在 Servlet 中使用 CDI 注入

    我正在尝试 Inject a SessionScoped将 bean 放入过滤器 WebFilter public class IdentityFilter implements Filter Serializable Inject pri