我们正在使用Spring批处理来自动化某些进程,并传递了许多参数,其中一些是敏感密码,无法记录。
我通过扩展JobParameter
和JobParameters
类来分别创建SensitiveJobParameter
和SensistiveJobParameters
类来阻止记录这些密码,这会覆盖toString()
和getString()
方法分别允许在需要时正确返回参数,并在需要时记录为星号。
这允许我用星号掩盖敏感参数,似乎主要起作用。但看起来,我仍在浏览日志以验证是这种情况,如果作业失败并重新启动参数从数据库加载并且未经过清理。
在code / config中是否有办法阻止spring批量记录它的参数?
我知道我可以修改slf4j配置以阻止作业启动器进行日志记录,但这意味着所有人都必须更改日志记录配置以记录我认为不可接受的密码。
SimpleJobLauncher
in this block of code:
taskExecutor.execute(new Runnable() {
@Override
public void run() {
try {
logger.info("Job: [" + job + "] launched with the following parameters: [" + jobParameters
+ "]");
job.execute(jobExecution);
logger.info("Job: [" + job + "] completed with the following parameters: [" + jobParameters
+ "] and the following status: [" + jobExecution.getStatus() + "]");
}
catch (Throwable t) {
logger.info("Job: [" + job
+ "] failed unexpectedly and fatally with the following parameters: [" + jobParameters
+ "]", t);
rethrow(t);
}
}
private void rethrow(Throwable t) {
if (t instanceof RuntimeException) {
throw (RuntimeException) t;
}
else if (t instanceof Error) {
throw (Error) t;
}
throw new IllegalStateException(t);
}
});
如果我找不到更好的解决方案,我可以覆盖SimpleJob启动程序的run方法,使其不具备该日志语句,但这看起来有点过分。