如何将Spring Security与Spring Batch集成?

时间:2015-03-18 09:03:40

标签: java spring spring-security spring-batch

我想创建一个安全的Web应用程序,用户可以在其中启动Spring Batch作业。我想跟踪谁发布了哪个职位,因此我必须将JobInstance(或JobExecution?)与用户相关联。我还想查询由特定用户启动的JobExecution。这似乎不是一个常见的用例,因为我在参考指南中找不到解决方案。

我是否必须为Spring Batch的持久层编写自己的实现?这似乎是仅仅为表添加字段的开销很大。有人知道一个简单的解决方案吗?

1 个答案:

答案 0 :(得分:3)

@Artem Bilan建议我将当前用户注入JobParameters。我编写了一个简单的服务类,它提供了一个查询给定用户执行ID的方法:

@Service
public class JobService {

    private static final String FIND_EXECUTIONS = "SELECT JOB_EXECUTION_ID FROM batch_job_execution_params WHERE KEY_NAME = 'user' AND STRING_VAL = ? ORDER BY JOB_EXECUTION_ID DESC";

    @Autowired
    private JdbcTemplate jdbcTemplate;

    public List<Long> findJobExecutionIdsByUser(String username) {
        return jdbcTemplate.queryForList(FIND_EXECUTIONS, Long.class, username);
    }

}

通过此列表,我可以像这样从默认JobExecution获取JobExplorer

final List<Long> executionIds = jobService.findJobExecutionIdsByUser("user");
final List<JobExecution> executions = new ArrayList<>();

for (Long executionId : executionIds) {
    final JobExecution execution = explorer.getJobExecution(executionId);

    if (execution != null) {
        executions.add(execution);
    }
}