在this link中,缺乏关于让2个容器相互信任的信息,请参阅“容器之间的信任”:
如果设计企业bean以便使用原始调用者标识或指定标识来调用目标bean,则目标bean将仅接收传播的标识。目标bean不会收到任何身份验证数据。
目标容器无法对传播的安全标识进行身份验证。但是,由于安全标识用于授权检查(例如,方法权限或使用isCallerInRole方法),因此>安全标识的真实性至关重要。由于没有身份验证数据可用于对传播的身份进行身份验证,因此目标必须信任调用容器已经>传播了经过身份验证的安全身份。
默认情况下,GlassFish Server配置为信任从不同容器传播的身份。因此,您无需采取任何特殊步骤来建立信任关系。
最后一部分吓到我了。但无论如何,我想知道如何使2个容器信任并且不相互信任,如果Tomcat 5.5和Glassfish 3.1.2之间可以实现这一点(因为我需要使用@RunAs从1个容器到另一个容器)
为了进一步澄清我的问题,我会告诉你我必须做什么和我的解决方案:
我正在制作一个Restful webservice以允许客户端下载文件,这个web服务位于* CONTAINER_A *,但在下载文件之前,webservices在* CONTAINER_B *中的EJB上调用以获取路径来自数据库的文件,也在* CONTAINER_B *中。问题是,我想确保来自* CONTAINER_B *的EJB调用仅由CONTAINER_A中的web服务加入,并且我在webservice中使用@RunAs注释,因此它充当* AUTHORIZED_ROLE *。问题是,访问web服务的客户端,我们称之为* WEB_CLIENT *,不必进行身份验证即可访问Web服务,但* CONTAINER_B *中的EJB只能被* AUTHORIZED_ROLE *加入。< / p>
清楚吗?还是我过于复杂化了?有更好的方法吗?因为@RunAs解决方案只有在我将JAX-RS web服务变为@Stateless bean时才可用,并且不鼓励使用文件系统操作(比如读取文件并将其发送回去),但是现在是唯一可以解决的问题。想到。