1
resposta

Authentication AUTH JWT

estou usando o JWT para fazer autenticação no meu sistema porém em um determinado lugar do sistema o Da o erro abaixo.

om.auth0.jwt.internal.com.fasterxml.jackson.core.JsonParseException: Unexpected character ('?' (code 65533 / 0xfffd)): expected a valid value (number, String, array, object, 'true', 'false' or 'null') at [Source: java.io.StringReader@528e4ed8; line: 1, column: 2]


        String header = new String(request.getHeader(HttpHeaders.AUTHORIZATION).getBytes("UTF-8"));
        if (header == null || header.isEmpty() || header.length() < 7) {
            response.sendError(HttpServletResponse.SC_UNAUTHORIZED);
            logger.warn("Tentativa de acesso sem token à URL " + request.getServletPath());
            return;
        }

        try {
            Map<String, Object> dados = JwtTokenHolder.verificar(header.substring(7));

            LocalDateTime dataExpira = LocalDateTime.parse(dados.get(JwtTokenHolder.EXPIRES).toString());
            if (dataExpira == null) {
                response.sendError(HttpServletResponse.SC_UNAUTHORIZED);
                logger.warn("Token não possui data de expiração.");
                return;
            }

            if (dataExpira.isBefore(LocalDateTime.now())) {
                response.sendError(HttpServletResponse.SC_UNAUTHORIZED);
                logger.warn("Token expirado.");
                return;
            }

            Object userId = dados.get(JwtTokenHolder.USER_ID);
            if (userId == null) {
                response.sendError(HttpServletResponse.SC_UNAUTHORIZED);
                logger.warn("Token não possui usuário.");
                return;
            }
            Usuario usuario = usuarioRepository.findOne(userId.toString());
            if (usuario == null) {
                response.sendError(HttpServletResponse.SC_UNAUTHORIZED);
                logger.warn("Usuário inválido.");
                return;
            }

            String cnpj = dados.get(JwtTokenHolder.PRINCIPAL).toString();
            Cliente cliente = clienteRepository.findByCgcent(cnpj);
            if (cliente == null) {
                response.sendError(HttpServletResponse.SC_UNAUTHORIZED);
                logger.warn("Cliente não cadastrado: " + cnpj);
                return;
            }

            SecurityContextHolder.getContext().setAuthentication(new UsuarioLogado(usuario));
        } catch (Exception e) {
            logger.error("Erro ao validar token", e);
            response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
            return;
        }

        filterChain.doFilter(servletRequest, servletResponse);
    }
1 resposta

Oi Arthur, essa é a mesma dúvida que você citou em outro post. Vamos continuar pela outra para não termos duplicidade :).

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software