如何拆分SFSB Facade?

我在使用基于EJB 3技术的应用程序时遇到了一些问题。 我想在Session bean中使用Facade Pattern来将我的客户端(Web应用程序)与我的Entity Beans分离。 我正在使用SFSB来管理用户会话。 所以我有一个
FacadeLoginRemote
远程接口,向客户端公开方法
doLogin()
doLogout()
等... 目前这个SFSB还包括一些其他方法,如
getCourse(int id)
getResource(int id)
。并非所有用户都可以实际获得课程并获取资源,因此Facade在将值返回给客户端之前执行一些检查。 我想拆分Facade,将方法
getCourse()
getResource()
放在一个特殊的类中,但是留给
FacadeLoginRemote
检查用户权限的功能。 如果我制作一些不同的SLSB,我会将它们暴露给客户端。因此,客户端可以直接连接到它们,避免来自
FacadeLoginRemote
的检查。 我错了吗?有没有办法做到这一点? 提前致谢, 安德里亚     
已邀请:
第一个建议;如果您正在构建Web应用程序,那么在同一应用程序中使用Web层和业务层更为典型。在这种情况下不需要远程处理。您的会话bean将在与Web层相同的JVM中运行。 这并不是说没有任何合理的理由使用远程接口(有很多),但阅读你的问题描述在我看来,你可能最好使用本地bean。 或者,您所说的Web应用程序是由其他人在其服务器上托管的远程应用程序,他们是否使用EJB bean中的服务? 在Java EE中,可以在Web模块中完成身份验证。特别是如果您使用的是本地bean,则此身份验证(安全主体)将自动传播到EJB bean。您可以注释EJB bean以要求特定的安全角色。如果用户未经过身份验证,则她没有该角色,服务将被拒绝。 在这种情况下,如果客户端尝试直接连接到具有
getCourse()
等方法的bean,则无关紧要。 我想知道你是如何在EJB中实现
doLogin()
的。我的猜测是你在那里做了一些自定义,不幸的是,据我所知,EJB3没有一种直接的方法来通过特定bean上的特定方法进行编程登录。安全性主要是声明性的,然后在访问任何bean时,客户端必须提供身份验证详细信息。例如。当您从远程JNDI请求bean时,您必须使用与远程服务器的初始JNDI连接提供这些详细信息。     

要回复问题请先登录注册