EJB3& JAAS主题/主体如何从servlet容器传播到EJB Tier?

时间:2011-08-25 20:23:06

标签: java java-ee ejb-3.0 jaas java-ee-5

我正在尝试了解JAAS主体如何从Web层传播到Business / EJB层。

我已经读过如果在 login-config &中配置了角色/领域 web.xml security-context 然后servlet容器也会透明地将经过身份验证的主体传递给EJB层。

两个问题
1.)第一&更重要的是这是真的吗?没有开发人员的任何干预!
2.)其次,任何想法如何在幕后工作。

4 个答案:

答案 0 :(得分:5)

  1. 是的,这是真的。这通常是ejb的要点,将“硬”东西从开发人员手中夺走(例如安全性,事务,健壮性,多线程等)。
  2. 它依赖于实现。我知道在jboss(至少4.x及之前)中,远程方法调用使用自定义序列化协议,该协议具有可以随请求一起发送的任意信息的附加Map。在这是auth信息以及支持群集的其他东西。对于本地方法调用,我相信他们使用像ThreadLocals这样的东西。

答案 1 :(得分:1)

在EJB调用中传播了各种“上下文”信息,一旦进入EJB层并开始执行EJB-EJB调用,那么事务就是一个例子。一些容器也允许您创建自己的上下文对象。

线程局部存储可以在进程中使用,但通常只是假设容器负责并且可以做正确的事情 - 实际技术是特定于实现的。

答案 2 :(得分:0)

关于你的第一个问题 - 是的。
关于你的第二个问题 - 例如你熟悉EJB3拦截器吗?
容器用bean的“拦截代码”创建代理对象,
此外,容器可以跟踪方法和bean类的其他注释,例如,检测@PostConstruct注释。
使用角色定义,它可以检查配置
(在旧版本的jboss中使用login-config.xml,或在独立配置中使用JBoss AS 7中的standalone.xml)并了解每个角色的定义。
JAAS用于为您提供身份验证和授权的抽象层。
JAAS背后的一个概念是登录模块 - 它为您提供“协议特定”代码,负责实际的授权和身份验证。
例如,我以这种方式使用Krb5LoginModule来使用kerberos。

答案 3 :(得分:0)

从Web层传播到EJB层的Principal是通过web.xml中的login-config配置的,正如您在大多数情况下所推测的那样。

如何实现它取决于实现。用户/组数据也取决于实现,并配置为应用程序服务器的一部分。

但是,其中一种方法是通过实施JASPIC提供程序,这是获取 Principal的标准方法。与WEB-INF/web.xml提供的标准表单登录,基本身份验证或证书身份验证相比,使用此功能可以使您拥有不同的身份验证路径,但这需要更多的工作。

JASPIC身份验证路径允许更复杂的方案,例如基于标头的身份验证或双因素或OpenID。用户数据库“通常”不需要绑定到应用程序服务器中的数据库。我说“通常”是因为WebSphere Application Server将身份验证绑定到服务器上配置的用户。