package com.dalab.autocompliance.config; import org.springframework.data.domain.AuditorAware; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.userdetails.User; import org.springframework.stereotype.Component; import java.util.Optional; @Component("auditorProvider") public class SpringSecurityAuditorAware implements AuditorAware { @Override public Optional getCurrentAuditor() { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); if (authentication == null || !authentication.isAuthenticated() || authentication.getPrincipal() instanceof String && "anonymousUser".equals(authentication.getPrincipal())) { return Optional.of("system"); // Default to system if no user or anonymous } Object principal = authentication.getPrincipal(); if (principal instanceof User) { return Optional.of(((User) principal).getUsername()); } else if (principal instanceof String) { return Optional.of((String) principal); } // For other principal types, you might need custom logic or return a default return Optional.of("system"); } }