3

我试图了解 JAAS 主体如何从 Web 层传播到业务/EJB 层。

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

两个问题
1.) 首先,更重要的是,这是真的吗?无需开发商干预!
2.)其次,任何想法如何在引擎盖下工作。

4

4 回答 4

5
  1. 对,是真的。这通常是 ejb 的重点,将“硬”的东西从开发人员手中夺走(例如安全性、事务、健壮性、多线程等)
  2. 它依赖于实现。我知道在 jboss(至少 4.x 及之前版本)中,远程方法调用使用自定义序列化协议,该协议有一个附加的任意信息映射,可以与请求一起发送。这是身份验证信息以及支持集群的其他内容。对于本地方法调用,我相信他们使用 ThreadLocals 之类的东西。
于 2011-08-25T20:30:20.153 回答
1

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

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

于 2011-08-25T20:34:39.623 回答
0

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

于 2012-11-02T07:10:17.237 回答
0

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

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

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

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

于 2017-06-20T14:11:44.243 回答