Por mais que a rota seja pública, pode ocorrer casos em que o "Authorization" seja enviado no header da requisição. Existe alguma forma de ignora-lo do lado do servidor, somente nas rotas públicas?
Por mais que a rota seja pública, pode ocorrer casos em que o "Authorization" seja enviado no header da requisição. Existe alguma forma de ignora-lo do lado do servidor, somente nas rotas públicas?
Olá Matheus, tudo bem?
Sim, é possível ignorar o header "Authorization" em rotas públicas no lado do servidor. Uma forma de fazer isso é utilizando um interceptor no Spring, que pode ser configurado para ser aplicado somente em determinadas rotas ou em todas as rotas. No interceptor, é possível verificar se a rota é pública e, caso seja, remover o header "Authorization" da requisição. Isso pode ser feito através do método removeHeader do objeto HttpServletRequest, que representa a requisição recebida pelo servidor. Exemplo:
@Component
public class AuthorizationInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// Verifica se a rota é pública
if (isPublicRoute(request)) {
// Remove o header Authorization da requisição
request.removeHeader("Authorization");
}
return true;
}
private boolean isPublicRoute(HttpServletRequest request) {
// Lógica para verificar se a rota é pública
// Pode ser feita com base em alguma anotação nos controllers ou em um arquivo de configuração, por exemplo
}
}
Depois, é preciso registrar o interceptor no WebMvcConfigurer do Spring, para que ele seja aplicado nas rotas corretas:
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Autowired
private AuthorizationInterceptor authorizationInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(authorizationInterceptor);
}
}
Com essa implementação, o header "Authorization" será removido somente nas rotas públicas configuradas no interceptor.