2
respostas

Validar token de sessão no springboot

Olá pessoal, estamos criando uma nova aplicação com springboot aqui na empresa. E o que eu preciso fazer é uma forma de validar o token que receberemos no cabeçalho do request, antes da chamada do método mapeado com o @RequestMapping

Esse trecho de código abaixo é um exemplo de como nossos código irão ficar.

@RequestMapping(value="/report", produces = { "application/json; charset=utf-8" }, method = RequestMethod.GET)
@ResponseBody
@Override
public String execute() {
    logger.debug("Olá");

    service.execute();

    String retorno = "{\"total\":10}";
    return retorno;
}

Minha ideia é criar uma classe Pai que irá conter o método validateToken, que irá realizar a validação do token e se este estiver de qualquer forma inválido, então o método execute não será chamado.

Então minha dúvida é, como criar a classe Pai que conterá o método validateToken, que deverá ser chamado antes do método execute da classe Filho. E no caso da validação indicar que o token não está válido, finalizar a execução da chamada, não chamando o método execute da classe Filho.

Até agora, vi que posso colocar na classe Pai um método anotado com @ModelAttribute, e se eu lançar uma RuntimeException o método execute da classe Filho não é chamado, mas aí o stack da RuntimeException é exibido no console e ocorre um Whitelabel Error Page

@ModelAttribute
public void validateToken() {
    logger.debug("Validando o token");
    throw new RuntimeException("Parou aqui no validateToken");
}

Obrigado pela ajuda pessoal.

Abs, Tiago

2 respostas

Essa validação é para todo request? Você poderia utilizar um Filter: https://www.mkyong.com/spring-mvc/how-to-register-a-servlet-filter-in-spring-mvc/

Olá Otávio,

Obrigado pelo retorno.

Mas o que precisamos é que seja realizada essa verificação dentro da estrutura da classe, ou da classe mãe.

Pois a classe irá possuir algumas configurações, feitas por anotações e então se eu colocar a validação no filtro, o filtro não conterá essas informações.

Será que a melhor forma é criar uma exception personalizada? Pois sei que consigo configura-la para que ele retorne um http-code 401 por exemplo.

Agradeço novamente pelo retorno.

Abs, Tiago

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