我使用EJB4.0.4(有点旧)中的httpinvoker进行JBoss调用。由于有如此多的客户端调用我的服务器,我希望为服务器中的每个调用标识客户端。
有没有办法用JBoss httpinvoker做到这一点?
我可以想象在每个HTTP请求中添加一个标头来标识我的客户端,但是无法找到在httpinvoker中添加标头的方法。
发布于 2013-07-24 20:36:30
审计建立在名称的基础上,因此以某种方式建立在身份验证方案之上。
因此,我建议使用标准的客户端身份验证基础设施来解决您的问题。这也适用于RMI (它不绑定到HTTP),用户ID甚至传递到您的EJB中。
服务器
configured.
security-domain中( ejb.jar:可以使用其他的UsersRolesLoginModule (conf/security-domain-config.xml);这是默认的策略,它已经将configured.UsersRolesLoginModule中添加他的名字和一个(虚拟)密码
客户端
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:
我不确定,如果没有定义角色,它是否可以工作。可能你不得不
security-role-ref,并在EJB中添加security-role和method-permission。更新
由于已经存在登录模块,因此可能存在另一种可能性:
如果您有登录模块的源代码,则可以使用另一个TextCallback从客户端获取附加信息(在本例中是用户ID)。该信息可用于创建自定义Principal。在EJB中,getCallerPrincipal()的结果可以转换为自定义主体。
https://stackoverflow.com/questions/17618050
复制相似问题