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?