如何隔离Java EE应用程序的逻辑层

时间:2012-12-19 22:26:20

标签: security ejb layer

我不确定这实际上是一个真正的问题还是一个愚蠢的初学者问题。也许我错过了一些观点,这个问题相当微不足道,所以请耐心等待。

如果我做对了,那么层和层之间的区别在于层与逻辑分离有关,而层则意味着应用程序各部分的物理分离。

可以将层实现为单独的层,以保护应用程序免受用户进行直接调用,例如数据访问对象。但我的目的是以逻辑方式从用户客户端隐藏应用程序的较低层,这意味着没有实际使用单独的jvms或应用程序服务器。我怎么能这样做,这是否与包装的发生方式有关? (不同档案如罐子,战争,耳朵以隔离逻辑......)。

我实际上对为分层服务器应用程序提供安全性感兴趣,因为可能存在各种不受我控制的客户端。如果我为客户端应用程序编程人员提供高级服务的接口,我也必须使用EJB安全注释来保护较低层。我希望通过将较低层标记为应用程序客户端无法访问的方式,以更优雅的方式执行此操作。

1 个答案:

答案 0 :(得分:2)

  

但我的目的是以逻辑方式从用户客户端隐藏应用程序的较低层,这意味着没有实际使用单独的jvms或应用程序服务器。

如果那些“用户客户端”在同一个JVM中运行,甚至同一个应用程序(例如同一个.war,同一个.ear),那么你所寻求的安全级别只是肤浅的。基本上,您可以防范自己的同事或团队成员(通常,“用户客户”是外部客户端,从不同的计算机运行,通过Internet连接到您)。

在Java EE EAR应用程序中有一些分层,但这些层是为了防止业务逻辑直接访问视图逻辑。例如。较低级别的层无法访问更高级别的层。这些层通过类加载器隔离相互保护。具体来说,每个Web模块位于层次结构的底部,而其他模块(甚至其他Web模块)也无法直接访问其中的代码。 EJB模块是一层向下,所有Web模块以及其他EJB模块都可以访问其中的代码。最后是顶层EAR,它不算作模块,但可以包含不能直接访问模块中的代码的实用程序代码,但可以被所有模块使用(因此跨层,Web模块)也可以直接访问这个)。

Java EE中的模块系统似乎与您想要的方式不同。它隐藏了更高层,而不是更低层。

通过将多个“协作”应用程序部署到同一应用程序服务器,可以实现额外的模块隔离级别。然后,您可以将EJB bean的远程接口定义为您尝试隐藏的逻辑的网关(外观)。请注意,尽管许多应用程序服务器也允许部署到同一AS的其他应用程序从JNDI请求本地EJB,即使EJB规范不要求这样做(但它也不禁止它)。

此外,还有通常的私有和受保护访问修饰符机制,但这些机制更能保护您免受编码错误的影响。反思技巧很容易通过它们。

然后是安全经理。如果您不相信自己的团队成员(“用户客户端”)中的代码,您可能需要考虑使用这些代码。它们可能很难使用,但可能正是您所寻找的。