Java Jaas LoginModule作用域和会话处理
我可能只是在JAAS上走错了路。我开始研究JAAS,因为我需要为应用程序提供自定义LoginModule 但每次我看到LoginModule的示例时,它们总是将主题定义为私有/受保护字段,在方法之间访问 所以我的问题是:LoginModule实例的范围是什么?它是一个保证总是在其他方法之前调用initialize的单例吗?或者每个经过身份验证的主题是否都有一个LoginModule?这是完全不同的吗 作为一个额外的问题?JAAS如何处理会话?我在任何地方都找不到sessionID(尽管我可能错过了非常明显的地方)LoginModule的实例的范围是什么? 它取决于创建/管理模块的组件 在JavaSE中,SPI的典型/预期用途是通过类,默认情况下,该类在委托给其Java Jaas LoginModule作用域和会话处理,java,jaas,Java,Jaas,我可能只是在JAAS上走错了路。我开始研究JAAS,因为我需要为应用程序提供自定义LoginModule 但每次我看到LoginModule的示例时,它们总是将主题定义为私有/受保护字段,在方法之间访问 所以我的问题是:LoginModule实例的范围是什么?它是一个保证总是在其他方法之前调用initialize的单例吗?或者每个经过身份验证的主题是否都有一个LoginModule?这是完全不同的吗 作为一个额外的问题?JAAS如何处理会话?我在任何地方都找不到sessionID(尽管我可能错过
login
方法之前,延迟实例化并初始化其每个模块一次。随后,上下文保留对完全相同的模块实例的引用,直到其被处置。因此,模块的生命周期取决于其封装上下文的生命周期。而且由于上下文的主题
同样只设置了一次,因此上下文的模块可以(实际上为了满足契约必须)安全地引用它,直到“时间结束”
只要模块由标准登录上下文管理,上述契约及其承诺自然有效。例如,如果应用程序选择直接与模块交互,它还必须承担这样做的责任,同时遵守标准登录上下文的协议——或者对模块实现提出进一步的要求。后者是JavaEE中经常发生的情况,其中供应商(在本例中为JavaSE应用程序)可能要求模块从其自己的类派生和/或伴随非标准配置
JAAS如何处理会话?
它不是1。它的设计并没有真正考虑到网络身份验证。它与Servlet和EJB等框架的集成也没有标准化
作为标准,JAAS寻求“公正”两件事:
- 成功验证后,使用
主体和凭据填充主题
- 线程与这些主体一起执行,以便以后可以基于主体和特定代码(是源自
ProtectionDomain的
,由ProtectionDomain)在单个调用堆栈帧的粒度范围内执行http://example.com
和“Fred”
,并包含声明方法“Alice”签名
的特定调用的类,当代表foo()
s{主体
,“Gill”
)标识的实体执行时,授予指定的“HR Manager”
权限
1如果我们稍微远离web应用程序领域,我们可以查看
LoginContext
(如果与一个或多个线程关联)和AccessControlContext
(首先与经过身份验证的主题的主体的主体的主体的,以便携带有意义的授权语义)作为一种会议。然而,所有可能的将这些绑定到某个web应用程序(框架)的方法都与标准JAA无关;e、 例如,在Servlet设置中,身份验证和授权由应用程序管理,可以将LoginContext
或其封装的Subject
作为属性附加到HttpSession
或HttpServletRequest
;或者Servlet容器本身可以在封面下使用AccessControlContext
,以便将容器管理的身份验证期间建立的主体与服务于请求的线程(并通过扩展请求本身)相关联