@ EnableNeo4jAuditing не вызывает getCurrentAuditor () - PullRequest
0 голосов
/ 05 августа 2020

Похоже, @ EnableNeo4jAuditing правильно устанавливает поля @CreatedDate и @LastModifiedDate, однако поля @CreatedBy и @LastModifiedBy всегда имеют значение NULL. Кроме того, метод getCurrentAuditor () моего класса AuditorAware никогда не вызывается. Что я делаю не так? Могут быть споры о том, следует ли извлекать данные из UserRepo в классе AuditorAware, однако мой вопрос: почему getCurrentAuditor вообще не запускается?

@EnableNeo4jAuditing(auditorAwareRef = "auditorAware", modifyOnCreate = true, setDates = true)
@SpringBootApplication
public class HockeyApplication {

    public static void main(String[] args) {
        SpringApplication.run(HockeyApplication.class, args);
    }

    @Bean
    public AuditorAware<User> auditorAware() {
        return new AuditorAwareConfig();
    }

}
public class AuditorAwareConfig implements AuditorAware<User> {

    @Autowired
    private UserRepo userRepo;

    @Override
    public Optional<User> getCurrentAuditor() {
        return Optional.ofNullable(SecurityContextHolder.getContext()).map(SecurityContext::getAuthentication)
                .filter(Authentication::isAuthenticated).map(authentication -> {
                    JwtAuthenticationToken token = (JwtAuthenticationToken) authentication;
                    Map<String, Object> attributes = token.getTokenAttributes();
                    User user = this.userRepo.findOneByEmail(attributes.get("user_name").toString()).block();
                    System.out.println(user.getEmail());
                    return user;
                });
    }
}
@Node("User")
public class User {

    @Id
    @GeneratedValue(generatorClass = UUIDStringGenerator.class)
    private String uuid;

    private String name;

    private String email;

    private String imageUrl;

    @CreatedDate
    private LocalDateTime createdDate;

    @CreatedBy
    private User createdBy;

    @LastModifiedDate
    private LocalDateTime lastModifiedDate;

    @LastModifiedBy
    private User lastModifiedBy;

}

Edit Я переключился на ReactiveSecurityContextHolder, и теперь есть бесконечная рекурсия, так что, может быть, лучше, а может и хуже ... возможно, придется установить UserDetailsService, хотя я действительно не хочу этого, поскольку мой сервер аутентификации использует это. Серверу ресурсов эта информация не нужна.

...