Есть приложение, в котором Spring Security настроено для аутентификации пользователя. В любом месте моего приложения, которое мне нужно, чтобы получить аутентифицированного пользователя, SecurityUtility.getAuthenticatedUser()
дает мне; Класс SecurityUtility выглядит следующим образом:
public class SecurityUtility {
public static Integer getAuthenticatedUserId() {
try {
User user = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
Integer PersonelId = null;
if (user.getPersonel() != null)
PersonelId = user.getId();
else
PersonelId = 1;
return PersonelId;
} catch (Exception ex) {
return 1;
}
}
public static User getAuthenticatedUser() {
try {
return (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
} catch (Exception ex) {
return new User(1);
}
}
}
Необходимо отметить, что количество раз, которое используется класс SecurityUtility
, превышает 500 в приложении .
Из-за некоторых причин, таких как SSO (единый вход) , приложение должно работать как в одном режиме, в котором настроено Spring Security , так же, как это работало правильно и как часть SSO (единый вход) . Из-за SSO мне нужно настроить OAuth2 рядом с Spring Security . В соответствии с производственным режимом (single или sso) приложение запускается со своим собственным уровнем безопасности (Spring Security или OAuth2).
Моя проблема:
Когда приложение запускается в одиночном режиме с Spring Security, это нормально, и нет никаких проблем, но когда оно запускается в режиме единого входа, SecurityUtility.getAuthenticatedUser()
не возвращает результат как объект User
, возвращает username
как Строка .
Итак, как мне исправить мою проблему с тем, чтобы я мог получить аутентифицированного пользователя в режиме OAuth2 так же, как и в режиме Spring Security?
Возможно ли это, или мне нужно изменить класс SecurityUtility.
Необходимо отметить, что тип метода SecurityContextHolder.getContext().getAuthentication()
into SecurityUtility
равен org.springframework.serurity.authentication.UsernamePasswordAuthenticationToken
, когда приложение запускается с помощью Spring Security, и его тип org.springframework.serurity.oauth2.provider.OAuth2Authentication
, когда приложение запускается с OAuth2 .