sábado, 27 de julho de 2019

Resolvendo problema CORS no Angular

Olá, hoje vou falar sobre o CORS – Cross-Origin Resource Sharing que significa compartilhamento de recursos de origem cruzada.

Antes era muito comum o uso de iFrames ou similares para fazer com que um site acessasse diretamente conteúdo de outros o que também era válido para aplicações web mais complexas, o problema é que isso começou a ser explorado por pessoas mal intencionadas para se passarem por um site ou serviço que não são e roubar informações ou outras atividades ilícitas. Então os navegadores começaram a “bloquear” esse tipo de coisa, validando antes se a origem tem acesso ao backend vindo de um IP diferente ou não configurado em uma digamos “White list”.

Trarar o CORS é obrigação do backend ou infra, mas é possível e também uma boa prática tratar no frontend. Para isso criamos um Proxy no nosso frontend. Como funciona um proxy? Ele recebe a requisição e a repassa com uma nova configuração de rede.

Vamos criar o nosso proxy, crie um arquivo chamado proxy.config.js no mesmo diretório em que se encontra o seu package.json  com o seguinte conteúdo:

{
"/api": {
    "target": "http://localhost:8080", //endereço do backend
    "secure": false
}
}
Agora configure dentro do seu angular.json o uso do proxy:
...
"defaults"
:{
     "serve":{
          "proxyConfig":"./proxy.config.js"
      }
...


Fonte:
Para ver todas as opções da configuração de proxy veja:
https://webpack.js.org/configuration/dev-server/#devserver-proxy

quarta-feira, 17 de julho de 2019

Método que verifica interseção entre períodos

    Neste artigo rápido trago um método que verifica se há interseção entre dois períodos de datas. Todo sistema precisa trabalhar com datas e é muito comum precisarmos desse tipo de validação:


public static boolean isIntersecaoEntrePeriodos(final Date aIni, final Date aFim, final Date bIni,
            final Date bFim)
    {
        if ( (aFim == null && bFim == null)
                || (aFim == null && aIni.compareTo(bIni) <= 0)
                || (aFim == null && bFim != null && aIni.compareTo(bFim) <= 0)
                || (bFim == null && bIni.compareTo(aIni) <= 0)
                || (bFim == null && aFim != null && bIni.compareTo(aFim) <= 0)
                || ((aFim != null && bFim != null) &&
                        ((aIni.compareTo(bIni) <= 0 && aFim.compareTo(bFim) >= 0)
                        || (aIni.compareTo(bIni) <= 0 && aFim.compareTo(bIni) >= 0)
                        || (aIni.compareTo(bIni) >= 0 && aFim.compareTo(bFim) <= 0)
                        || (aIni.compareTo(bFim) <= 0 && aFim.compareTo(bFim) >= 0))) )
        {
            return true;
        }
        return false;
    }