Optional<UsersAuth> optionalUsers = usersAuthRepository.findByName(username);
Он ищет пользователя по его имени, вероятно, в базе данных или другом хранилище в памяти.
optionalUsers
.orElseThrow(() -> new UsernameNotFoundException("Username not found"));
Как вы уже знаете, эта строка выдаст исключение, если Optional
пуст в другом слова user не существуют.
return optionalUsers
.map(CustomUserDetails::new).get();
Эта строка создает новый объект класса CustomUserDeatils
, реализующий интерфейс UserDetails
, и возвращает его. CustomUserDeatils
имеет конструктор с параметром UsersAuth
.
return getRoles()
.stream()
.map(role -> new SimpleGrantedAuthority("ROLE_" + role.getRole()))
.collect(Collectors.toList());
Это простое отображение, вероятно, Role
коллекции в SimpleGrantedAuthority
список. Как я упоминал ранее, класс CustomUserDeatils
реализует UserDetails . Один из его методов - Collection<? extends GrantedAuthority> getAuthorities()
, который используется для получения информации о полномочиях, предоставленных пользователю. AuthenticationProvider
будет использовать эту информацию из UserDetailsService
для создания объекта Authentication
. Spring Security будет проверять, есть ли у аутентифицированного пользователя требуемые роли и c, используя эти сопоставленные роли. SimpleGrantedAuthority
- это просто реализация GrantedAuthority
. ROLE_
- префикс по умолчанию, используемый RoleVoter
, когда вы проверяете роли в методе вашего контроллера, например, @Secured("ROLE_ADMIN")