Solucionado (ver solução)
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!