如何授权 Java 批处理作业,以便它可以从 WebSphere Liberty 中的启动 bean 运行?

How to authorize a Java Batch job so it can run from a startup bean in WebSphere Liberty?

我正在尝试从我的启动 bean 中提交一个基本的批处理作业,它给我一条错误消息 "User UNAUTHENTICATED is not authorized to start batch jobs."

这是我的启动 bean:

@Singleton
@Startup
public class ControllerBean {
    @PersistenceContext(unitName = "item-persister")
    EntityManager entityManager; 

    @PostConstruct
    public void initialize() { 
        JobOperator jobOperator = BatchRuntime.getJobOperator();
        long execID = jobOperator.start("testjob", null);
    }
}

在我的server.xml中,我配置了一个用户名和密码:

<basicRegistry id="basic" realm="ibm/api">
    <user name="bob" password="bobpwd"/>
</basicRegistry>

<authorization-roles id="com.ibm.ws.batch">
    <security-role name="batchAdmin">
        <user name="bob"/>
    </security-role>
</authorization-roles>

如何正确验证才能让启动 bean 运行 我的工作?

一个简单的方法是:

配置 RunAs 身份

您需要将 @RunAs 注释值与服务器配置对齐。

在服务器配置中 (server.xml):

<application name="MyApp" ... >
    <application-bnd>
        <security-role name="JOBSTARTER">
            <user name="bob" />
            <run-as userid="bob" password="bobpwd"/>
        </security-role>
    </application-bnd>
</application>

在您的 Java 调用 JobOperator 的代码中:

@Singleton
@Startup
@RunAs("JOBSTARTER")
public class ControllerBean {

    @PostConstruct
    public void initialize() { 
        JobOperator jobOperator = BatchRuntime.getJobOperator();
        long execID = jobOperator.start("testjob", null);
    }
}

在您的代码段中,您将基本注册表和用户映射到批处理授权角色。您只需要通过 @RunAs.

在线程上建立此用户