我正在使用 spring data jpa 为我的实体填充审计数据。
我们有一个每晚运行的 quartz 作业,它不会被验证,在这种情况下,我们希望“createdBy”值为“system”。在其他情况下,我们希望它填充当前登录的用户。
当我通过 UI 创建 Purcahse 订单时,“createdBy”字段始终填充有“system”,而不是当前登录的用户 ID。
我尝试让 AuditorAware bean 变得懒惰并将范围更改为原型,但它们都不起作用。我在代码中放置了一个断点,我可以看到 SecurityContext 和 Authentication 对象不为空,但它仍然返回“系统”
@Entity
@EntityListeners(AuditingEntityListener.class)
public class Purchase{
String purchaseNbr;
@CreatedBy
private String createdBy;
}
@Configuration
@EnableJpaAuditing
public class Auditconfig{
@Bean
public AuditorAware<String> auditAware(){
if(SecurityContextHolder.getContext()==null || SecurityContextHolder.getContext.getAuthentication() == null ) {
//during spring context initialization, i can see this branch gets hit, if i put a breakpoint here
return () -> Optional.of("system");
}else {
//this branch never gets hit even when "if" condition is false during runtime
return () -> Optional.of(SecurityContextHolder.getContext().getAuthentication().getName());
}
}
}
预期“createdBy”是当前用户,但始终是“系统”
至尊宝的传说
相关分类