I am using the solution 1', so that in the single register() method I re-use acegi's password encoder to encrypt the plain-text password:
Code:
PasswordEncoder passwordEncoder;
SaltSource salt;
public void register(T account) throws ObjectAlreadyExistsException{
try {
accountDao.findByUsername(account.getUsername());
throw new ObjectAlreadyExistsException("Account already exists!");
} catch (ObjectNotFoundException e) {
accountDao.create(account);
// setting a password with an "Id" as a salt
String encryptedPassword = passwordEncoder.encodePassword(account.getPassword(), salt.getSalt(account));
account.setPassword(encryptedPassword);
}
}
pretty easy to implement and works as charm 
Also, it doesn't depend on anything but acegi, so that you can use it no-hibernate app.