java - 如何将 Spring Security 与 Spring Batch 集成?

标签 java spring spring-security spring-batch

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

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

最佳答案

正如@Artem Bilan 建议的那样,我将当前用户注入(inject)到 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);
    }

}

通过这个列表,我可以从默认的 JobExplorer 中获取 JobExecution,如下所示:

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);
    }
}

关于java - 如何将 Spring Security 与 Spring Batch 集成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29117799/

相关文章:

java - 使用 ActionListener 避免全局变量

java - Stackdriver Spring Boot 缺少有效 key

java - 如何将Spring Security RemoteTokenService与Keycloak一起使用

spring-security - 将 security=none 应用于上下文根和静态资源 : spring security version 3. 1

java - 贝塞尔低通算法

java - Android 服务在 OPPO 小米 MIUI vivio 等某些设备上停止工作

java - 在方法、变量或对象之间使用 java 中的两个句号

java - 使用组时 Spring Boot 2 剩余 validator 调用两次

java - Hibernate saveorupdate 或 merge 用于保存/更新一对多关系对象

java - 为什么 hibernate 不能执行命令