Java EE客户端 - 服务器体系结构中的安全性

时间:2011-10-25 10:04:58

标签: java-ee tomcat jboss security

我正在尝试为以下架构实现安全性:

  • Web层:使用GWT的Tomcat 7应用服务器。
  • 后端:使用EJB和JPA的JBoss 7.1应用服务器来保存数据。 EJB由Web层远程使用。

我正在考虑使用JBoss安全性,其中涉及:

  • 通过login-config.xml
  • 在JBoss中创建安全域
  • 安全域使用DatabaseServerLoginModule从用户名/密码和角色方面检索MySQL数据库中的数据。
  • 授权:通过使用@RolesAllowed。
  • 注释我的EJB方法来实现基于EJB的安全性

我之前在一个JBoss中使用它并在JBoss的Tomcat中配置web.xml。然后使用jboss-web.xml将我的Web应用程序绑定到我在JBoss中创建的安全域。

现在我关心的是如何使用两个独立的服务器:一个Tomcat Web容器,它可以远程调用后端JBoss。我的问题:

  • 如何让我的Tomcat知道远程JBoss中定义的安全域(如果可能的话),以便它向JBoss委派在DB中查找凭据的任务?
  • 如果我的GWT组件调用远程EJB,我怎样才能将安全凭证从Tomcat传播到远程JBoss(主体,密码),而不必在每次调用中指定那些?
  • 这可行吗?还有其他替代品可以让我的生活更轻松吗?

1 个答案:

答案 0 :(得分:2)

  1. 远程访问LoginModule没有标准方法。因此,如果您想在后端使用后端的loginmodule作为JAAS loginmodule,则必须从后端公开逻辑,例如:作为REST或WS服务,并在Tomcat中创建自定义loginmodule以远程调用它。

  2. 理论上,如果您通过JNDI查找后端EJB并对其执行安全方法调用,则应传播JAAS安全上下文。在实践中,每个AS都以不同的方式处理,我从未在不同的AS之间看到它。

  3. 还有一种方法,就是使用Spring Security。请参阅包org.springframework.security.remoting.httpinvokerorg.springframework.security.remoting.rmi。但这要求您一直使用Spring Remoting和Spring Security。