Я реализую oauth2 с помощью Spring-Security с помощью Springboot2.
Я аутентифицирую пользователя, используя только Spring-Security, и возвращаю пользовательский объект обратно, используя имя пользователя и пароль.(http://localhost:8181/login)
Здесь пользователей может быть несколько с одной и той же почтой. Поэтому снова из объекта пользователя, который я получил, я принимаю ID пользователя и отправляю (http://localhost:8181/oauth/token)
здесь я хочу передать толькоgrant_type и userId снова не username и password для генерации токена доступа и обновления токена с использованием oauth2.
Как мне это получить.
можно ли получить имя пользователя и пароль из предыдущего запроса. И какя могу настроить в oauth2, чтобы выполнить мое требование.
, пожалуйста, помогите.
В приведенном ниже коде я проверяю подлинность одного пользователя, сохраняя лимит 1 позже, я получаю всех пользователей с одинаковым идентификатором почты. парольодинаково для всех.
@Override
@Transactional
public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException {
User user = new User();
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
.getRequest();
String stringuserId = request.getParameter("userId");
Long userId = 0L;
try {
if (stringuserId != null) {
userId = Long.parseLong(stringuserId);
System.out.println(userId);
System.out.println(request.getParameter("username"));
user = userRepository.findByUserId(userId).orElseThrow(
() -> new UsernameNotFoundException("User Not Found with -> username or email : " + email));
System.out.println(user.toString());
return UserPrinciple.build(user);
} else {
Set<GrantedAuthority> authorities = new HashSet<>();
CustomUser userDetails = new CustomUser(email, "", authorities);
String checkUser = "SELECT \"USER_ID\",\"EMAIL_ID\",\"PASSWORD\" FROM \"TU_IOT_PLATFORM_PROD\".\"USER_MASTER\" WHERE \"EMAIL_ID\"='john@test.com' LIMIT 1;";
List<Map<String, Object>> toValues = new ArrayList<Map<String, Object>>();
toValues = jdbcTemplate.queryForList(checkUser);
if(toValues.size()>0) {
for (Map<String, Object> map : toValues) {
userDetails.setUserId((int) map.get("USER_ID"));
userDetails.setEmail((String)map.get("EMAIL_ID"));
userDetails.setPassword((String)map.get("PASSWORD"));
}
}else {
throw new UsernameNotFoundException("User Not Found with -> username or email : " + email);
}
System.out.println(userDetails.toString());
return userDetails;
}
} catch (NumberFormatException e) {
userId = 0L;
user = userRepository.findByEmail(email).orElseThrow(
() -> new UsernameNotFoundException("User Not Found with -> username or email : " + email));
}
return UserPrinciple.build(user);
}
}