Jasypt e Spring Boot

Jasypt e Spring Boot

Introdução

Jasypt é uma biblioteca que permite que você criptografe propriedades de maneira fácil. Assim, caso você precise de uma propriedade com informações sensíveis (tais como aquelas previstas pela Lei Geral de Proteção de Dados - LGPD) você pode mantê-las criptografadas de forma fácil e rápida.

Para manter uma propriedade que guarda uma URL você usaria algo como:

minha.url.secreta=https://minhaurl.com

Com jasypt a mesma propriedade ficaria como:

minha.url.secreta=ENC(ysjdiQyzNE+WaPMEErO5XLxPKHqxeoYSHxKn1TY4hFSAvhNgVVvAHZeo9XJ5GiixrUVBe8rmY8/FZwBV2hZQ/g==)

E isso é muito simples de ser feito se você tiver usando maven, jasypt e spring-boot.

Criando um projeto Spring Boot com Jasypt

O projeto final deste tutorial pode ser encontrado aqui: [github.com/osdeving/jasypt-demo.git]

Primeiro, crie um projeto com spring-boot e adicione a seguinte dependência:

<dependency>
            <groupId>com.github.ulisesbocchio</groupId>
            <artifactId>jasypt-spring-boot-starter</artifactId>
            <version>3.0.4</version>
</dependency>

Agora inclua o seguinte plugin do maven:

<build>
        <plugins>
            <plugin>
                <groupId>com.github.ulisesbocchio</groupId>
                <artifactId>jasypt-maven-plugin</artifactId>
                <version>3.0.4</version>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
<build>

E por fim, crie uma propriedade no seu application.properties pra ser criptografada:

minha.url.secreta=https://minhaurl.com

Usando o plugin do maven para criptografar

Uma vez que você tenha seu projeto com a dependência e o plugin, você só precisa colocar suas propriedades dentro de DEC(...). P.ex.:

minha.url.secreta=DEC(https://minhaurl.com)

E agora você executa o comando:

$ mvn jasypt:encrypt -Djasypt.encryptor.password="meu-password"

Após o comando, sua propriedade vai automaticamente se tornar algo como:

minha.url.secreta=ENC(ysjdiQyzNE+WaPMEErO5XLxPKHqxeoYSHxKn1TY4hFSAvhNgVVvAHZeo9XJ5GiixrUVBe8rmY8/FZwBV2hZQ/g==)

Prático e rápido, pois não?

Usando a propriedade no Código

Vimos um exemplo onde uma propriedade foi criptografada (usando o plugin) com um password, no caso usamos o password "meu-password".

A variável de ambiente usada foi: jasypt.encryptor.password. Para este exemplo vamos deixar essa propriedade no próprio arquivo properties do projeto:

minha.url.secreta=ENC(ysjdiQyzNE+WaPMEErO5XLxPKHqxeoYSHxKn1TY4hFSAvhNgVVvAHZeo9XJ5GiixrUVBe8rmY8/FZwBV2hZQ/g==)
jasypt.encryptor.password=jasypt-password

Sabemos que isso não precisa ficar no properties, pode ser passado via argumento, ser colocado numa variável de ambiente, etc..

Feito isso, adicione na sua classe principal um código tal como:

@SpringBootApplication
@EnableEncryptableProperties
@Log4j2
public class ExecuteApplication {
    @Value("${minha.url.secreta}")
    private String minhaUrlSecreta;

    @PostConstruct
    void show() {
        log.info("### URL descriptografada: {}", minhaUrlSecreta);
    }

    public static void main(String[] args) {
        SpringApplication.run(ExecuteApplication.class, args);
    }
}

Repare que a anotação @EnableEncryptableProperties foi adicionada (@Log4J2 é uma anotação lombok que permite usar log tal como foi usado nesse exemplo)

Repare que, após capturar a propriedade com @Value, conseguimos visualizar a mesma já descriptografada. A saída vai ser algo como:

restartedMain] c.n.w.jasypdemo.ExecuteApplication       : ### URL descriptografada: https://minhaurl.com

É isso! Maiores detalhes espreitem estes links:

github.com/osdeving/jasypt-demo.git

github.com/ulisesbocchio/jasypt-spring-boot

jasypt.org/index.html