Dicas de Spring #1 – simulando autenticação no Spring Security em testes automatizados

Estamos iniciando nossa série “Dicas de Spring”. Neste primeiro post vamos ver como proceder para simular uma autenticação na escrita dos seus testes unitários ou de integração.

O primeiro passo é incluir a dependência spring-security-test em seu projeto. Se estiver usando Maven, basta incluir este código em seu arquivo pom.xml:

<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-test</artifactId>
<version>substitua pelo mesmo número da versão do seu Spring Security!</version>
<scope>test</scope>
</dependency>

 

Gradle? Igualmente fácil, inclua a dependência no seu arquivo build.gradle tal como exposto a seguir:

testCompile "org.springframework.security:spring-security-test:[versão]"

 

Muita atenção para o escopo da dependência (apenas teste) e o número da versão, que sempre deve ser o mesmo que o da sua instalação do Spring Security.

Feito isto, simular um usuário autenticado é algo incrivelmente fácil: basta que você use a classe TestSecurityContextHolder que vêm na dependência spring-security-test (pacote org.springframework.security.test.context), tal como no exemplo abaixo:

 

TestSecurityContextHolder
.getContext()
.setAuthentication(new JwtUser(account, new ArrayList<GrantedAuthority>()));

 

A classe JwtUser é uma classe que inventamos e que implementa a interface Authentication do Spring Security que recebe como parâmetro uma lista de permissões e o objeto que representa o usuário autenticado.

E é simples assim. Não é muito difícil imaginar como podemos proceder para simular o mesmo efeito com Grails no plugin Spring Security Core, hein? Quem sabe não será nossa próxima Dica de Grails?

2 comments on “Dicas de Spring #1 – simulando autenticação no Spring Security em testes automatizados

  1. Dica bacana! Normalmente resolvi isso com jUnit Rules básica. A ideia é a mesma, o Rules só se preocupava de limpar o contexto a cada teste.

Responda

Your email address will not be published. Required fields are marked *