Iremos ao UserRepository e criar um método para encontrar um User. Usaremos os query methods da JPA mesmo.
//interassante colocar em Optional, pois caso o User não exista//ele volta um Optional vazio.Optional<User>findByEmail(String email);
No UserService, criaremos um método para isso. Ele será protected, só será possível chamá-lo nas classes de service.
Essa função irá retornar um User.
Voltando para o método do UserService o parâmetro usado dentro da chamada do repository será advindo dos códigos abaixo.
protectedUserauthenticate() {try {//Pega um objeto do tipo authentication dentro do Spring Security.//Ou seja, se tem um cara autenticado ele pega.Authentication authentication =SecurityContextHolder.getContext().getAuthentication();//pegando o user autenticado (dentro de authentication) faremos o casting para JWT,//e usaremos o getPrincipal.Jwt jwtPrincipal = (Jwt) authentication.getPrincipal();//O getPrincipal por sua vez, possui os claims (onde foi configurado dentro do //pacote config). A partir disso, podemos recuperar o seu username (email)String username =jwtPrincipal.getClaim("username");returnuserRepository.findByEmail(username).get(); }catch (Exception e) {thrownewUsernameNotFoundException("User not found"); }}
E se o User estiver vazio ou não tiver logado? Lança a exception.