Em um projeto recente, descobri que o BCrypt é um excelente algoritmo de hashing para armazenar senhas no banco de dados. Eu queria usá-lo no projeto, mas o módulo de autenticação DatabaseServerLoginModule não possui uma opção para seu uso (apenas para os algoritmos de hashing reconhecidos pela classe java.security.MessageDigest
como MD5
e SHA
).
O bom do software livre é que seu código está disponível e, assim, podemos modificá-lo para nossas necessidade, certo? Thanks, Richard Stallman, Linus Torvalds and so many other incredible people! De qualquer forma, aprendi que, com Orientação a Objetos, não precisamos necessariamente abrir o código para poder estender suas funcionalidades. Neste caso, thanks, Uncle Bob and all other fantastic people from Object Mentor.
Juntando tudo isso, criei uma nova classe que chamei de DatabaseServerWithBCryptLoginModule
:
import org.jboss.security.auth.spi.DatabaseServerLoginModule; import org.mindrot.jbcrypt.BCrypt; public class DatabaseServerWithBCryptLoginModule extends DatabaseServerLoginModule { @Override protected boolean validatePassword(String inputPassword, String expectedPassword) { return BCrypt.checkpw(inputPassword, expectedPassword); } }
É isso mesmo, só isso! O.O. rulez! 🙂
Bom, na verdade, você ainda precisa das dependências, que foram resolvidas com o Maven:
<dependencies> <dependency> <groupId>org.jboss.security</groupId> <artifactId>jbosssx</artifactId> <version>2.0.4.SP4</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.mindrot</groupId> <artifactId>jbcrypt</artifactId> <version>0.3m</version> </dependency> </dependencies>
Espero que esta informação seja útil para você!
Bons códigos e até o próximo post!
Deixe uma resposta