首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jboss httpinvoker中的客户端标识符(审核)

jboss httpinvoker中的客户端标识符(审核)
EN

Stack Overflow用户
提问于 2013-07-12 23:04:09
回答 1查看 314关注 0票数 0

我使用EJB4.0.4(有点旧)中的httpinvoker进行JBoss调用。由于有如此多的客户端调用我的服务器,我希望为服务器中的每个调用标识客户端。

有没有办法用JBoss httpinvoker做到这一点?

我可以想象在每个HTTP请求中添加一个标头来标识我的客户端,但是无法找到在httpinvoker中添加标头的方法。

EN

回答 1

Stack Overflow用户

发布于 2013-07-24 20:36:30

审计建立在名称的基础上,因此以某种方式建立在身份验证方案之上。

因此,我建议使用标准的客户端身份验证基础设施来解决您的问题。这也适用于RMI (它不绑定到HTTP),用户ID甚至传递到您的EJB中。

服务器

configured.

  • Add

  • 将EJB放在一个security-domain中( ejb.jar:可以使用其他的UsersRolesLoginModule (conf/security-domain-config.xml);这是默认的策略,它已经将configured.
  • Add users.properties和roles.properties添加到您的ejb.jar文件(顶层包):这些都是由UsersRolesLoginModule
  • For使用的,在users.properties

中添加他的名字和一个(虚拟)密码

客户端

  • 创建实现javax.security.auth.callback.CallbackHandler的回调类:当身份验证需要用户和客户端时,使用此回调;将回调处理程序作为第二个参数传递;在启动-Djava.security.auth.login.config=.../jboss-4/client/auth.conf时,通常使用-Djava.security.auth.login.config=.../jboss-4/client/auth.conf对EJB服务器调用客户端实例上的-Djava.security.auth.login.config=.../jboss-4/client/auth.conf

这样,用户ID就从客户端传递到EJB (作为标准身份验证过程的一部分)。现在,在EJB方法中,您可以通过在SessionContext实例上调用getCallerPrincipal()来获取用户ID。我已经针对JBoss 4.2.3进行了测试

更多信息:JBoss client authentication

附录1:

使用RMI或HTTP时,密码不会以安全的方式传输。在这种情况下,只需使用虚拟密码,这对于审计来说是可以的。

另一方面,如果您使用RMI over SSL或HttpInvoker over HTTPS,您可能很快就会切换到真正安全的身份验证。

附录2:

我不确定,如果没有定义角色,它是否可以工作。可能你不得不

  • 在roles.properties中为每个用户添加一行:添加连接角色,例如
  • 也在ejb-jar.xml中添加角色定义:为每个EJB添加security-role-ref,并在EJB中添加security-rolemethod-permission

更新

由于已经存在登录模块,因此可能存在另一种可能性:

如果您有登录模块的源代码,则可以使用另一个TextCallback从客户端获取附加信息(在本例中是用户ID)。该信息可用于创建自定义Principal。在EJB中,getCallerPrincipal()的结果可以转换为自定义主体。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17618050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档