Passo um

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.

protected User authenticate() {
    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");
        return userRepository.findByEmail(username).get();
    }
    catch (Exception e) {
        throw new UsernameNotFoundException("User not found");
    }
}

E se o User estiver vazio ou não tiver logado? Lança a exception.

Atualizado