Dav*_*idS 1 java architecture ejb java-ee cdi
我们的应用程序包含与支持bean和无状态EJB服务交互的Web页面,但也有一个与无状态EJB服务交互的远程客户端.
许多服务查询数据库,然后根据当前用户/调用者过滤结果集(例如,用户只能查看某些记录类型); 也就是说,他们使用程序化而非声明性安全性.
在网络方面,我的直觉是将当前登录的用户存储在SessionBean中,但我希望无状态EJB服务根据当前登录的用户过滤结果集,以便过滤也适用于远程客户端调用.我可以将SessionBean注入无状态EJB服务,但我认为SessionBeans使用HTTP会话,并且因为在远程客户端调用期间没有HTTP会话,所以我看不出它是如何工作的.
我觉得我的方法是错误的,我应该从容器中检索"Principal"; 但是,由于我们的应用程序的开发生命周期,容器管理的安全性尚未设置,但我仍然负责实现负责过滤记录的业务逻辑,而不是以后.
我密切相关的问题:
ps我是Java EE的新手.
技术:
javax.enterprise.context.SessionScopedjavax.ejb.Stateless更新:
有关"远程客户端"的更多详细信息.我不确定如何说这个,因为我是Java EE的新手,但这个"远程客户端"不会通过HTTP.另一个应用程序,我们称之为应用程序X,将从客户端接收XML消息.我认为他们使用证书对客户端进行身份验证.应用程序X将XML转换为POJO并直接调用我的无状态EJB服务.
在这种情况下,我认为我说我不应该SessionBean向StatelessEJB服务注入,因为在应用程序X调用EJB服务时将不会有HTTP会话.我的理解是否正确?
感谢您的耐心等待.我知道我对这些事情的无知.
你的问题并不完全清楚.你的问题让我承担了很多.因此,您应该打破问题并提供更多详细信息.首先,您应该提到您正在使用的Java EE版本.无论如何,我的细节与你的背景有一些假设.
假设您正在讨论关注Backing beans:http://docs.oracle.com/javaee/5/tutorial/doc/bnaqm.html
"无状态bean"==无状态会话bean:http://docs.oracle.com/javaee/6/tutorial/doc/gipjg.html#gipin
SessionScoped bean:http://docs.oracle.com/javaee/6/tutorial/doc/gjbbk.html
"远程客户端交互":http://docs.oracle.com/javaee/6/tutorial/doc/gipjf.html#girfl
在主要问题的情况下,您应该记住将Http会话与有状态会话bean分开:有状态会话Bean和HTTP会话
因此,如果您尝试将Http Session与有状态会话bean耦合,则必须将http会话详细信息提供到一个区域,在该区域中,http会话和有状态会话bean都可以访问数据,并且还可以保存对它的引用.
这也假设您的远程EJB服务不会首先创建http会话.因此,您将无法通过远程EJB对HTTP会话进行有效引用.
如果您使用基于HTTP的"远程客户端交互",为什么不在第一次请求时创建http会话?
HttpServletRequest.getSession(true)
Run Code Online (Sandbox Code Playgroud)
将确保您将始终获得有效的会话
如果您正在使用其他一些HTTP基础框架,例如jax-rs,那么还有一些选项可以在那里获得http会话.
更新1
是否可以将SessionScoped bean注入无状态EJB,因为知道远程客户端将调用Statelesss EJB?在这种情况下,SessionScoped bean的价值是多少?
您可以在EJB中将支持bean用作POJO,但不能用作http会话范围的bean.如果您需要远程EJB,则必须先使用它们进行初始化,然后才能使用它们.意味着,对远程EJB调用没有任何价值.
我的支持bean和无状态EJB服务是否应该从容器中检索Principal,而不是SessionScoped bean?
这里的问题还不完全清楚.您可以配置要使用的容器(glassfish)具有手动用户,角色和领域.因此,这是您对安全性的本地模拟,您可以从容器中检索Principal. http://docs.oracle.com/javaee/6/tutorial/doc/bnbxj.html#bnbxs
独立:我建议您阅读有关Java EE的Oracle教程.非常好.花一些钱,我会推荐Java EE 7 Essentials
| 归档时间: |
|
| 查看次数: |
1596 次 |
| 最近记录: |