Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
11
respostas

[Dúvida] Erro 500 no GetSubject()

Olá!! Até onde estou fazendo curso, todo o meu código parece estar nos conformes, já revirei tudo que podia e não encontrei onde está ocorrendo o erro. A Exception indica que é o método GetSubject(), mas já reescrevi esse múltiplas vezes e mesmo assim ainda não funciona. Arquivo TokenService.java

Arquivo SecurityFilter.java

11 respostas

Olá, Gabriel!

Você consegue fornecer mais informações sobre o erro exibido? Pode ser um print do console da IDE mesmo, já facilitará a descoberta do problema. Olhando assim, pode ser que algum campo esteja nulo e ao executar seja lançada uma NullPointerException, são várias possibilidades. As informações da exception ajudarão a entender melhor o cenário.

Certo, oq apareceu no Insomnia foi isso aqui e segue um print do console também.

{ "timestamp": "2023-10-16T18:00:15.916+00:00", "status": 500, "error": "Internal Server Error", "trace": "java.lang.RuntimeException: Token JWT inválido ou expirado!\r\n\tat med.voll.api.infra.security.TokenService.getSubject(TokenService.java:49)\r\n\tat med.voll.api.infra.security.SecurityFilter.doFilterInternal(SecurityFilter.java:27)\r\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)\r\n\tat org.springframework.security.web.FilterChainProxy.lambda$doFilterInternal$3(FilterChainProxy.java:231)\r\n\tat org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:365)\r\n\tat org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:126)\r\n\tat org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:120)\r\n\tat org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374)\r\n\tat org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:131)\r\n\tat org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:85)\r\n\tat org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374)\r\n\tat org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:100)\r\n\tat org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374)\r\n\tat org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:179)\r\n\tat org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374)\r\n\tat org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)\r\n\tat org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374)\r\n\tat org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:107)\r\n\tat org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:93)\r\n\tat org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374)\r\n\tat org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)\r\n\tat org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)\r\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n\tat org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374)\r\n\tat org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:82)\r\n\tat org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:69)\r\n\tat org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374)\r\n\tat org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:62)\r\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n\tat org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374)\r\n\tat org.springframework.security.web.session.DisableEncodeUrlFilter.doFilterInternal(DisableEncodeUrlFilter.java:42)\r\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)\r\n\tat org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:374)\r\n\tat org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:233)\r\n\tat org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:191)\r\n\tat org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:352)\r\n\tat org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:268)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)\r\n\tat

Certo, o erro exibido é o que você está lançando dentro do try catch. Você está passando o token válido? Que tambem nao esteja expirado? Você pode conferir as informações do seu token em: https://jwt.io/

Caso esteja tudo ok, tente rodar o projeto sem o try catch, para que possamos ver o real erro que está sendo lançado

Perdão pela demora!

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

Esse seria o output sem o try catch. E creio que o token que envio está válido, pois quando tento executar sem o método GetSubject() tudo funciona normalmente.

Entendi, pela mensagem exibida, o token não está chegando nesse trecho de código. Como você está enviando o token? Consegue mandar um print do Insomnia?

Parece então que o token está parando no método GetSubject.

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

O sr quer algum print mais específico do Insomnia?

Como essa é a requisição para efetuar login e obter o token, na aba bearer você não deve enviar nada. Pode desmarcar naquela opção "Enabled".

Certo, eu alterei essa opção. Testei o código sem o método getSubject e ele funcionou normalmente, mas o mesmo para de funcionar quando recoloco o método ele torna a dar erro. Fala que o token está nulo.

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

solução!

Certo, entendi!

Você precisa validar se o token retornado não está nulo. Adicione um if para isso.

Insira aqui a descrição dessa imagem para ajudar na acessibilidadeSó pode chamar esse trecho de código só pode ser chamado se tokenJWT != null

Acho que conseguimos resolver, muitíssimo obrigado!!!

Boa, Gabriel!

Demorou mas foi hehe top

Se puder marcar essa resposta como solução, te agradeço. Bons estudos!