我有一个基于Web的应用程序,它将远程EJB用于其业务逻辑。其中一些EJB也作为Web服务公开。我需要为其中一些调用保持一个小状态,以便后续调用正常运行。您会推荐以下哪一项?
答案 0 :(得分:2)
所有三种提议的解决方案都可以使用,但最佳解决方案将取决于您的应用程序的详细信息。
我根本不使用有状态会话Bean(SFSB)。 SFSB旨在保持会话状态,但通过Web服务使用它们会引发关于会话究竟是什么的问题?如果您有一个复杂的部署环境或用户使用该应用程序的多个实例,那么这可能是一个脆弱的解决方案。
返回状态 - 正如问题所示,除非您确定服务器可以信任其客户端,否则可能存在安全问题。您可以使用加密技术来验证状态对象是否未被修改,但是不将敏感数据提供给潜在的恶意客户端会更安全。另一种可能有用的情况是,如果允许客户端改变状态,或者如果客户端这样做,则不会造成任何伤害。如果客户端对系统的访问始终是通过Web层进行的,那么这是存储会话状态的好地方。 Web层和应用层可以安全地交换状态对象。
从数据库重新加载状态可能是最普遍适用的方法。如果您使用实体bean或对象关系映射库,那么服务器应该能够减少数据库查询的数量。
答案 1 :(得分:1)
您唯一的选择是在DB中存储与某个UserId相关的适当信息。
您不能将Statefull bean公开为Webservice。
如果将Beans作为Web服务公开,您可以尝试通过放入SOAP标头来反复发送其他信息,以防止对正文进行修改。但在这种情况下,客户将能够改变它。