我正在尝试了解JAAS主体如何从Web层传播到Business / EJB层。
我已经读过如果在 login-config &中配置了角色/领域 web.xml 的 security-context 然后servlet容器也会透明地将经过身份验证的主体传递给EJB层。
两个问题
1.)第一&更重要的是这是真的吗?没有开发人员的任何干预!
2.)其次,任何想法如何在幕后工作。
答案 0 :(得分:5)
答案 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将身份验证绑定到服务器上配置的用户。