У меня есть модель пользователя
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "user_id")
private Long id;
@Size(min = 2, max = 20)
@NotBlank
private String firstName;
@Size(min = 2, max = 40)
@NotBlank
private String lastName;
@NotBlank
@Size(max = 20)
private String username;
@NotBlank
@Email
private String email;
@Enumerated(EnumType.STRING)
@NotNull
private Gender gender;
@NotBlank
private String password;
boolean isActive;
//Contructors,getters,setters
И пользовательская реализация UserDetailsService
public class CustomUserDetailsService implements UserDetailsService {
private UserRepository userRepository;
@Autowired
public CustomUserDetailsService(UserRepository userRepository) {
this.userRepository = userRepository;
}
@Override
public UserDetails loadUserByUsername(String usernameOrEmail) throws UsernameNotFoundException {
User user = userRepository.findByUsernameOrEmail(usernameOrEmail, usernameOrEmail)
.orElseThrow(() ->
new UsernameNotFoundException("User not found with username or email : " + usernameOrEmail)
);
//???
}
И я хочу, чтобы люди могли входить с именем пользователя или электронной почтой, но я не знаю, гденачать искать и что реализовать.Когда я использовал логин с единственным именем пользователя, я реализовал org.springframework.security.core.userdetails.User следующим образом:
org.springframework.security.core.userdetails.User userDetails =
new org.springframework.security.core.userdetails.User(
user.getEmail(),
user.getPassword(),
convertAuthorities(user.getRoles()));
return userDetails;
}
private Set<GrantedAuthority> convertAuthorities(Set<UserRole> userRoles) {
Set<GrantedAuthority> authorities = new HashSet<>();
for(UserRole ur: userRoles) {
authorities.add(new SimpleGrantedAuthority(ur.getRole()));
}
return authorities;
}
Но я не знаю, как реализовать это с помощью логина с именем пользователя или электронной почтой. Любойпомощь и указатели высоко ценятся.