java - 如何在无状态 session bean 中获取用户信息

标签 java jakarta-ee ejb

我正在开发一个现有的 j2ee 应用程序,需要从代码中删除一些供应商特定的方法调用。

session 外观后面的 daos 调用 ejb 容器来获取用户的 ID 和密码 - 以便连接到数据库。用于连接到服务器的initialContext 的用户ID 和密码部分。

我可以使用 sessionContext.getCallerPrincipal() 获取用户 ID

有没有办法获取服务器连接上使用的SECURITY_CREDENTIALS,或者有没有办法将信息从服务器连接传递到ejbs(它们都是无状态 session bean)。

这是一个大型应用程序,同时具有富客户端和 Web 前端,在完美的世界中,我很乐意返回并重新构建整个解决方案以使用 J2EE 安全性等 - 但不幸的是,这是不现实的。

最佳答案

我无法为您提供通用的解决方案,但这对我们来说是有效的。我们让应用程序服务器作为特定用户连接到 LDAP,该用户能够请求其他用户的凭据。然后,我们有一些通用的安全代码,可以根据初始登录时的用户身份,使用它们从 session Bean 内部请求用户凭据(就像您通过 getCallerPrincipal() 执行的操作一样)。

我们还将用户身份放在线程局部变量中,以便 EJB 调用链下游的类不必“容器感知”。他们只需从本地线程访问身份并使用安全类来查找用户配置文件信息。这也使得更改测试的实现甚至是 LDAP 查找以外的其他操作变得容易。

我们创建的其他便利设施是 JDBCServiceLocator,它检索当前用户与用户/密码的连接。因此,开发人员根本不必显式地编写安全查找代码。

关于java - 如何在无状态 session bean 中获取用户信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/331069/

相关文章:

java - 无法让远程 EJB 与 Wildfly 上的 EJB 客户端 API 配合使用

java - 关于Java EE部署方式,哪种更好?

java - ReSTLet 客户端卡住 HTTPS 请求

java - 在 java 中动态更改 TitledBorder 颜色

jakarta-ee - Netbeans 7.3.1 添加服务器 Glassfish 4.1

frameworks - Struts2配置和性能

java - 当 RAD 执行 "Run On Server"时,WebSphere 将 EAR 文件放在哪里?以及如何在其上运行createEJBStubs?

java - 没有在 TextView 上获取样式

java - 如何正确计算数组输入的平均值?

java - 是Java过滤器单例