调度程序任务用户授权
调度程序服务在运行时使用 Concurrency Utilities for Java EE 延迟启动机制将 Java™ Platform, Enterprise Edition (Java EE) 服务上下文信息传播到任务。如果您计划使用构建到 WebSphere® Application Server 中的管理安全性机制的 JAAS 安全上下文来保护应用程序,请在线程上使用正确的凭证创建每个任务。
使用下列方法以指定的安全凭证运行的任务:
- 在创建任务时,使用线程中的 Java 认证和授权服务 (JAAS) 安全上下文。请参阅并行文档中的“延迟启动和安全性”主题。
- 使用 TaskInfo 对象中的 setAuthenticationAlias 方法。
- 使用指定的安全标识(在 BeanTaskInfo 任务 TaskHandler EJB 方法中)。
调度程序服务在运行时利用 Concurrency Utilities for Java EE 延迟启动机制将 Java EE 服务上下文信息传播到任务。传播的服务上下文信息的量是由调度程序引用的 WorkManager 配置对象中的服务上下文设置控制的。例如,可以启用安全服务和国际化服务上下文。请参阅有关并行的信息,以了解有关如何配置应用程序服务器传播这些服务上下文的详细信息。
Java 认证和授权服务安全上下文
如果您计划使用构建到产品中的管理安全性机制的 JAAS 安全上下文来保护应用程序,请在线程上使用正确的凭证创建每个任务。当每个任务都具有正确的凭证后,您就可以禁用并重新启用管理安全性,而不会导致任何安全问题。如果在创建调度程序任务时您没有设置安全上下文,而后来又在目标应用程序中启用了安全性,可能会显示安全异常或错误消息(如 SECJ0053E)。如果不同服务器中的两个或更多调度程序正在访问相同的表(集群调度程序或冗余调度程序),并且安全设置不同,也会出现这一错误。如果出现下列任何一种情况,那么不设置 JAAS 安全上下文:
- 管理安全性已禁用。
- 为关联的调度程序配置对已配置的 WorkManager 禁用了安全上下文策略。
- 线程中未设置凭证。例如,用于创建安排任务的企业 Bean 或 servlet 未得到保护或使用 WASScheduler MBean 创建了任务。
当创建任务时,如果出现上述任何一种情况并且您需要在应用程序服务器或应用程序中启用安全性,您必须为每个任务完成以下步骤:
- 使用 Scheduler API find 或 get 方法找到该任务。
- 使用 Scheduler.cancel() API 取消该任务。
- 启用安全性并使用 Scheduler.create() 方法重新创建该任务。提交通过 find 或 get 方法从调度程序检索到的任务将自动生成一个新的任务标识。
安全优先顺序
如上所述,有三种方法可以验证任务是否可以使用正确的用户凭证运行。此外,每个 TaskInfo 实现可能自有提供用户信息的方法,这种方法可能优先于标准机制。如果使用了多种方法,请参阅以下列表以确定将采用哪种安全性机制。
BeanTaskInfo- 在 Enterprise Java Bean 文件的 process() 方法中设置的 TaskHandler 安全标识
- 在 TaskInfo 接口中使用 setAuthenticationAlias 方法设置认证别名
- JAAS 安全上下文
- 在 TaskInfo 接口中使用 setAuthenticationAlias 方法设置认证别名
- MessageTaskInfo 接口中的 setUsername 和 setPassword 方法。请参阅“不推荐使用的功能部件”一文以了解更多信息。