View Javadoc
1   package fr.tiogars.inception.config;
2   
3   import java.util.Optional;
4   
5   import org.springframework.data.domain.AuditorAware;
6   import org.springframework.security.authentication.AnonymousAuthenticationToken;
7   import org.springframework.security.authentication.AuthenticationCredentialsNotFoundException;
8   import org.springframework.security.core.Authentication;
9   import org.springframework.security.core.context.SecurityContextHolder;
10  import org.springframework.stereotype.Component;
11  
12  /** Resolves audit actors from the authenticated security context. */
13  @Component
14  public class SecurityAuditorAware implements AuditorAware<String> {
15  
16      @Override
17      public Optional<String> getCurrentAuditor() {
18          Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
19          if (authentication == null || !authentication.isAuthenticated()
20                  || authentication instanceof AnonymousAuthenticationToken) {
21              throw new AuthenticationCredentialsNotFoundException("An authenticated user is required for auditing");
22          }
23          return Optional.of(authentication.getName());
24      }
25  }