@Override public boolean equals(Object o) { if (o == this) { return true; } if (o instanceof JobExecutionContext) { JobExecutionContext that = (JobExecutionContext) o; return (this.authentication.equals(that.getAuthentication())) && (this.locale.equals(that.getLocale())); } return false; }
@Override public JobExecutionContext createJobExecutionContext(JobExecution jobExecution) { Authentication authentication = jobExecutorTokenService.createToken(jobExecution); Locale locale = jobExecutorLocaleService.createLocale(jobExecution); return JobExecutionContext.create(authentication, locale); } }
private void updateInternal(JobExecution jobExecution, JobExecutionContext jobExecutionContext) { SecurityContext originalContext = SecurityContextHolder.getContext(); try { SecurityContext securityContext = SecurityContextHolder.createEmptyContext(); securityContext.setAuthentication(jobExecutionContext.getAuthentication()); SecurityContextHolder.setContext(securityContext); tryUpdate(jobExecution); } finally { SecurityContextHolder.setContext(originalContext); } }
static JobExecutionContext create(Authentication newAuthentication, Locale newLocale) { return builder().setAuthentication(newAuthentication).setLocale(newLocale).build(); }
private <T> T runWithContext(JobExecutionContext jobExecutionContext, Callable<T> callable) { final SecurityContext originalContext = SecurityContextHolder.getContext(); final Locale originalLocale = LocaleContextHolder.getLocale(); try { SecurityContextHolder.setContext(SecurityContextHolder.createEmptyContext()); SecurityContextHolder.getContext().setAuthentication(jobExecutionContext.getAuthentication()); LocaleContextHolder.setLocale(jobExecutionContext.getLocale()); return callable.call(); } catch (RuntimeException rte) { throw rte; } catch (Exception e) { throw new IllegalStateException("Lambda should only throw runtime exception", e); } finally { SecurityContextHolder.setContext(originalContext); LocaleContextHolder.setLocale(originalLocale); } }