以下是我尝试做的事情:我有一个身份验证EJB,可以授予用户"票证" (密钥和令牌对)通过验证用户名和密码。客户端应该在每次调用远程EJB时传递票证,这样的票证应该能够被EJB(方法或拦截器)获取,而EJB /或拦截器应该验证票证并确定调用是否有效。
我不想将票证作为参数添加到需要身份验证的每个功能,我相信应该有一种方法来实现它。我已经浏览了几篇关于JAAS自定义登录模块的文章,但仍然无法找到非供应商特定的方法来执行此操作。 (我试图避免供应商特定的实施)
如果JAAS无法完成这项工作,是否有类似" header"在EJB?
答案 0 :(得分:0)
你不能只使用角色来执行此授权吗?而不是向用户授予票证,为他分配一个角色。
然后,只需使用检查用户是否在角色中的内置功能。</ p>
答案 1 :(得分:0)
虽然我同意@EdH,即使用@RunAs,但您可以通过向令牌上下文添加令牌来实现您想要的目标。
Red Hat使用接口here执行类似EJBClientInterceptor的操作。 通过查看ReceiverInterceptor(实现EJBClientInterceptor)的代码,您可以看到如何修改EJB上下文(在客户端)并添加令牌:
context.setReceiverInvocationContext(新 EJBReceiverInvocationContext(context,receiverContext));
context.sendRequest();