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

时间:2013-07-12 15:04:09

标签: jboss auditing httpinvoker

我在JBoss 4.0.4(旧版本)中使用httpinvoker进行EJB调用。 由于有太多的客户端调用我的服务器,我想识别服务器中每个调用的客户端。

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

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

1 个答案:

答案 0 :(得分:1)

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

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

服务器

  • 将EJB放入security-domain(ejb.jar:META-INF / jboss.xml)
  • 您可以使用仅application-policy(conf / login-config.xml)的UsersRolesLoginModule 其他;这是默认策略,已经配置。
  • 将users.properties和roles.properties添加到您的ejb.jar文件(顶级包):这些文件由UsersRolesLoginModule
  • 使用
  • 对于每个用户,将他的姓名和(虚拟)密码添加到users.properties

客户端

  • 创建一个实现javax.security.auth.callback.CallbackHandler的回调类:当身份验证需要用户和密码时,使用此回调。
  • 创建javax.security.auth.login.LoginContext;传递回调处理程序作为第二个参数;在login()
  • 的实例上调用LoginContext
  • 使用InitialContext
  • 正常连接到EJB服务器
  • 启动客户端时添加-Djava.security.auth.login.config=.../jboss-4/client/auth.conf

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

其他信息:JBoss client authentication


附录1:

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

另一方面,如果您通过HTTPS使用基于SSL的RMI或HttpInvoker,您可以快速更改为真实安全的身份验证。


附录2:

我不确定,如果它没有定义角色的话。可能你必须

  • 为每个用户在roles.properties中添加一行:添加连接角色,例如
  • 在ejb-jar.xml中添加角色定义:每个EJB都有security-role-refsecurity-role
  • 中有method-permissionassembly-descriptor

更新

由于已有登录模块,可能还有另一种可能性:

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