9
respostas

Angular e Spring security

Só consigo utilizar o Spring security e o angular, se na configuração do spring security tiver assim: http.csrf().disable();

Mas preciso utilizar o csrf().

Como fazer ?

9 respostas

Oi Guilherme, tudo bem?

Você consegue sim utilizar o CSRF com o Angular. O que acontece é que é necessário disponibilizar o token do CSRF para o Angular utilizar no front-end.

O Angular tem suporte para CSRF através do uso de cookies então você pode criar um filtro no servidor para escrever o valor do token nos cookies.

Um exemplo de código seria acrescentar estas linhas no seu método configure:

    .and().csrf()
    .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());

Você pode ver mais detalhes deste tipo de implementação aqui no site do Spring que possui um tutorial de como fazer isto com detalhes.

Abraço!

Joviane, ainda não.

A minha dúvida é:

Esta página localhost:8080/des-if-web/#/pais, será acessada somente após o usuário digitar um login válido ?

Oi Guilherme,

Não entendi sua dúvida, esta página é referente a qual curso?

Abraço!

Nenhum. Não vi curso de Spring com angular. Existe os mesmos separados.

Para acessar as páginas do angular, acesso por este endereço.

localhost:8080/des-if-web/#/estado e por ai vai.

Oi Guilherme,

Depende de como estão configuradas suas rotas na configuração do Spring Security. Lá deve estar descrito quais URLs precisam de autenticação.

Abraço!

Então.

Minha rota, leva a uma pagina html. nesta página html tem a indicação de qual controlle do angular deve utilizar.

Este controller tem um Factory, que tem várias comunicações com algum método REST do JAVA (importar aquivo, consultar, salvar e deletar).

Entendeu ?

Bem entendi após ver alguns exemplos funcionais (Vídeos), textos, exemplos no GitHub e entendi que funciona. kkkk

Tem que ser gerado um Token, pelo Spring. O mesmo retorna para o usuário Angular. Este Token fica nuna variável tipo global, que vai ser sempre passado para o servidor.

Toda requisição, seja ela POST, GET, etc, vai ser passado para o servidor JAVA, este token, sem que o usuário perceba, que deve ser validado, pois existem várias configurações, neste token.

Resolvei tentar fazer do mesmo que este exemplo https://github.com/jmw5598/gro-light-automationhttps://github.com/jmw5598/gro-light-automation.

Consegui bloquear uma página, pelo spring security e liberar também, desde que esteja dentro .permitAll(), do secutity.

Entendi também que .antMatchers("/admin/").authenticated().anyRequest()**, o que tiver com este endereço tem que estar validado com o token.

O que consegui.. Gerar o token.

Mas não consegui recuperar o mesmo para fazer as validações necessárias.

O método é este: String authToken = request.getHeader(this.tokenHeader);.

Se altero para String authToken = request.getHeader("Authorization");, consigo recupar o token, mas não consigo recuperar as informações de dentro do token.

O código está dando esta exceção:

https://gist.github.com/guilhermecostalopes/6365e1adc98cbd454e7f813e80f86492

Algo sobre caracteres

O Token está vindo assim: Authorization - Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIwMjY3OTUwMDYzNiIsImF1ZGllbmNlIjoid2ViIiwiY3JlYXRlZCI6MTUyMTk4NDY1ODMwOCwiZXhwIjoxNTIxOTg0NjU5fQ.MWOPiMJjCN4iQbcbhDKz3LKCNNdO-rNK8tIWfuwmZFTUwic0tUYk2poVRztb6Y6byrsOOUA6eQ7-jVkWOH6EEg

Quando ele chega neste método: parseClaimsJws(token);

Ainda não descobri o que é ...

Ninguém passou por isto ?