Я создал загрузочное приложение Spring со следующей конфигурацией:
В моем проекте есть класс AuditConfiguration, который выглядит так:
@Configuration
@EnableJpaAuditing(auditorAwareRef = "auditorProvider")
public class AuditConfiguration {
@Bean
public AuditorAware<String> auditorProvider() {
return new AuditorAwareImpl();
}
class AuditorAwareImpl implements AuditorAware<String> {
@Override
public Optional<String> getCurrentAuditor() {
Principal principal =
SecurityContextHolder.getContext().getAuthentication();
return Optional.of(principal.getName());
}
}
}
а SecurityContextHolder.getContext().getAuthentication() всегда возвращает anonymousUser.
Однако следующий код возвращает правильное имя пользователя.
@RestController
@RequestMapping("/history")
public class HistoryEndpoint {
@RequestMapping(value = "/username", method = RequestMethod.GET)
@ResponseBody
public String currentUserName(Principal principal) {
return principal.getName();
}
}
Мне нужна ваша помощь в решении этой проблемы.
вы устанавливаете объект аутентификации в контексте безопасности Spring?
Пожалуйста, покажите свои файлы конфигурации
Я получил аутентифицированного пользователя, используя следующий класс. у меня была проблема с JPA Auditing.
@CreatedBy всегда сохранял null. затем я попытался получить аутентифицированного пользователя SecurityContextHolder.getContext().getAuthentication(), используя этот метод. этот метод вернул annonymousUser. однако моя проблема исправлена.
@ManagedBean
@EnableJpaAuditing
public class SpringSecurityAuditorAware implements AuditorAware<String> {
private final HttpServletRequest httpServletRequest;
public SpringSecurityAuditorAware(HttpServletRequest httpServletRequest) {
this.httpServletRequest = httpServletRequest;
}
@Override
public Optional<String> getCurrentAuditor() {
return Optional.ofNullable(httpServletRequest.getUserPrincipal())
.map(Principal::getName);
}
}
Попробуйте использовать объект-участник autowire вместо того, чтобы получать его напрямую от держателя контекста безопасности, и проверьте, исчезла ли проблема.