Ao tentar fazer qualquer requisição e principalmente o login para gerar o token, ocorre o erro 500
Ao tentar fazer qualquer requisição e principalmente o login para gerar o token, ocorre o erro 500
Fala Mateus,
Parece que está faltando você passar o token JWT no cabeçalho da requisição:
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:
Libero o acesso a todas as URLs do AuthenticationController:
Copia o valor do token sem àspas
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 ", "");
}
} `
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.