У меня есть приложение Spring MVC, которое в данный момент не использует SpringSecurity.Я написал AuditInterceptor для журналов аудита Hibernate, в котором нужен способ получить пользователя, вошедшего в систему.Из того, что я могу найти в Интернете, лучший способ сделать это через SecurityContextHolder SpringSecurity.Однако в настоящий момент мне не нужны никакие другие функции SpringSecurity, и я не хочу переписывать, как приложение выполняет аутентификацию или авторизацию в настоящее время.
По сути, то, что я ищуэто минимальный объем конфигурации, необходимый для того, чтобы сохранить вошедшего в систему пользователя в SecurityContextHolder и снова вернуть его обратно в мой AuditInterceptor.
Моей первой попыткой было добавить следующую строку на страницу входа в систему, которая существует в настоящее время:
Authentication auth = new UsernamePasswordAuthenticationToken(u.getName(), u.getPassword());
SecurityContextHolder.getContext().setAuthentication(auth);
И добавить следующее к перехватчику:
SecurityContext secureContext = SecurityContextHolder.getContext();
Authentication auth = secureContext.getAuthentication();
Object principal = auth.getPrincipal();
String userName = null;
if (principal instanceof UserDetails) {
UserDetails userDetails = (UserDetails) principal;
userName = userDetails.getUsername();
} else {
userName = principal.toString();
}
Это было успешно, но, к сожалению, не безопасно для потоков.У кого-нибудь есть другие идеи?