Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Erro 500 ao fazer login ou qualquer requisição

Ao tentar fazer qualquer requisição e principalmente o login para gerar o token, ocorre o erro 500 Insira aqui a descrição dessa imagem para ajudar na acessibilidade

5 respostas

Fala Mateus,

Parece que está faltando você passar o token JWT no cabeçalho da requisição:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Primeiro você precisa se autenticar mandando um request pro endpoint de login, se a autenticação der certo será retornado um token para você. Pra você conseguir acessar o enpoint de login, você vai precisar liberar o acesso a esse enpoint nas configurações do SecurityConfigurations.

Por exemplo, o meu enpoint de login é /auth/login: Insira aqui a descrição dessa imagem para ajudar na acessibilidade

  • Libero o acesso a todas as URLs do AuthenticationController: Insira aqui a descrição dessa imagem para ajudar na acessibilidade

  • Copia o valor do token sem àspas

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

  • Habilita o envio do bearer token no cabeçalho da requisição

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

  • Cola o token no campo "Token"

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Oi Mateus!

Na requisição de login não precisa do token, pois é a requisição para se obter um token. O problema deve estar na sua lógica da classe SecurityFilter. Posta o código dela aqui.

Olá professor, estou enviando aqui .`package med.voll.api.infra.security;

import jakarta.servlet.FilterChain; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.web.filter.OncePerRequestFilter;

import java.io.IOException;

@Component public class SecurityFilter extends OncePerRequestFilter {

@Autowired
private TokenService tokenService;

@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
    var tokenJWT = recuperarToken(request);

    var subject = tokenService.getSubject(tokenJWT);
    System.out.println(subject);
    filterChain.doFilter(request, response);

}

private String recuperarToken(HttpServletRequest request) {
    var authorizationHeader = request.getHeader("Authorization");
    if(authorizationHeader == null){
        throw new RuntimeException(("Token JWT não enviado no cabeçalho Authorization!"));
    }
    return authorizationHeader.replace("Bearer ", "");
}

} `

solução!

O problema está aqui:

private String recuperarToken(HttpServletRequest request) {
    var authorizationHeader = request.getHeader("Authorization");
    if(authorizationHeader == null){
        throw new RuntimeException(("Token JWT não enviado no cabeçalho Authorization!"));
    }
    return authorizationHeader.replace("Bearer ", "");
}

No if, se o token estiver vindo null, você está lançando exception. Isso faz com que o token seja sempre obrigatório, mas não deve ser assim, pois na requisição de login o token não é enviado.

O código é para ficar assim:

private String recuperarToken(HttpServletRequest request) {
    var authorizationHeader = request.getHeader("Authorization");
    if(authorizationHeader == null){
       return null;
    }
    return authorizationHeader.replace("Bearer ", "");
}

E no outro método:

var tokenJWT = recuperarToken(request);
if (tokenJWT != null) {
    var subject = tokenService.getSubject(tokenJWT);
    System.out.println(subject);
}

filterChain.doFilter(request, response);

Obrigado professor e o parceiro que ajudaram, resolveu o problema.