Я реализую oauth2 с помощью Spring-Security, используя springboot2, основываясь на ссылке ниже.
https://www.devglan.com/spring-security/spring-boot-oauth2-jwt-example
И я успешно его реализую.
Здесь у меня естьдругой вариант использования вышеуказанного кода при аутентификации пользователя.
Мне нужно передать companyid вместе с именем пользователя и паролем и grant_type (пароль) на вкладке "x-www-form-urlencoded" в почтальоне.И я должен выбрать пользователя на основе имени пользователя и companyId.
Поэтому, пожалуйста, помогите мне, какие изменения мне нужно сделать в приведенном выше коде ссылки, чтобы я мог выполнить свое требование.
Вот яполучать только электронную почту.Мне нужен адрес электронной почты вместе с идентификатором компании.
@Override
@Transactional
public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException {
User user = userRepository.findByEmail(email).orElseThrow(
() -> new UsernameNotFoundException("User Not Found with -> username or email : " + email));
return UserPrinciple.build(user);
}
Expected:
@Override
@Transactional
public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException {
User user = userRepository.findByEmailAndCompanyId(email,companyId).orElseThrow(
() -> new UsernameNotFoundException("User Not Found with -> username or email : " + email));
return UserPrinciple.build(user);
}
В настоящее время с именем пользователя и паролем все работает нормально.
Но в моей системе один и тот же пользователь сопоставлен с разными компаниями. Если сопоставлен один и тот же пользовательдля нескольких найденных компаний я получаю сообщение об ошибке, как показано ниже.
{"error": "unauthorized", "error_description": "запрос не дал уникальный результат: 2; вложенное исключение - javax.persistence.NonUniqueResultException:запрос не вернул уникальный результат: 2 "}
Мне нужно выбрать пользователя на основе имени пользователя, пароля и companyId, что приведет к одному пользователю.