Как получить основной объект Oauth2 такой же, как основной объект Spring Security - PullRequest
0 голосов
/ 10 марта 2019

Есть приложение, в котором 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 .

...