如何从java桌面应用程序中保留fos_user数据

时间:2018-03-22 05:38:19

标签: java symfony authentication fosuserbundle salt

我们是使用SCRUM方法处理项目的团队中的五名学生。 我们的第一个sprint是WEB应用程序...... 现在,我们正在使用JAVA进行桌面应用程序的第二个sprint。 在第一个sprint(Sprint Web)中,我们使用FOS_USER Bundle创建了我们的数据库,该数据库包含' User'表,他的sql脚本是(某些列):

DROP TABLE IF EXISTS `User`;
CREATE TABLE IF NOT EXISTS `User` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(180) COLLATE utf8_unicode_ci NOT NULL,
  `username_canonical` varchar(180) COLLATE utf8_unicode_ci NOT NULL,
  `email` varchar(180) COLLATE utf8_unicode_ci NOT NULL,
  `email_canonical` varchar(180) COLLATE utf8_unicode_ci NOT NULL,
  `enabled` tinyint(1) NOT NULL,
  `salt` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `password` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `last_login` datetime DEFAULT NULL,
  `confirmation_token` varchar(180) COLLATE utf8_unicode_ci DEFAULT NULL,
  `password_requested_at` datetime DEFAULT NULL,
  `roles` longtext COLLATE utf8_unicode_ci NOT NULL COMMENT '(DC2Type:array)',
  PRIMARY KEY (`id`),
  UNIQUE KEY `UNIQ_1D1C63B392FC23A8` (`username_canonical`),
  UNIQUE KEY `UNIQ_1D1C63B3A0D96FBF` (`email_canonical`),
  UNIQUE KEY `UNIQ_1D1C63B3FF631228` (`etablissement_id`),
  UNIQUE KEY `UNIQ_1D1C63B3C05FB297` (`confirmation_token`)
) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

现在,在sprint java中,我们使用Netbeans工具从数据库生成了实体,我们得到了这个类(一些attributs):

public class User{
private Integer id;
private String username;
private String usernameCanonical;
private String email;
private String emailCanonical;
private short enabled;
private String salt;
private String password;
private Date lastLogin;
private String confirmationToken;
private Date passwordRequestedAt;
private String roles;
}

现在,我们需要将一个User对象持久化(/ get to authentificate)到这个数据库中(/来自),但问题是,密码是用FOS_USER Bundle加密的。那么破解/加密这个密码的方法是什么。 我们的DAOUser是这样的!?

public void ajouter(User user) {
    String req = "INSERT INTO User (nom,username,email,enabled,salt,password,roles) VALUES (?,?,?,?,?,?)" ;
    PreparedStatement pre;
    try {
        pre = connection.prepareStatement(req);
        pre.setString(1, user.getUsername());
        pre.setString(2, user.getEmail());
        pre.setShort(3, user.getEnabled());
        //Some thing wrong : exp in database {username:Zain,salt:'0Yi3LZANkpfMsnhbn2XHA00cASLCGVfWc7TJWNOjXsk')
        pre.setString(4, user.getSalt());
        //Some thing wrong : exp in database {username:Zain,passowrd:'qXSSYBDXWQA/ZcbPVOoBKzd5oshTkQP0Q3AeEilnh47Mcrc9uUZYDYwmRJiMKc7nRPvRx6k0eEJrc6HrrDvZtQ==')
        pre.setString(5, user.getPassword());
        //This Role must be unserialised(the equivalent unserialize method in php)
        pre.setString(6,user.getRoles());

        pre.executeUpdate();
    } catch (SQLException ex) {
        Logger.getLogger(EtablissementService.class.getName()).log(Level.SEVERE, null, ex);
    }
}

1 个答案:

答案 0 :(得分:1)

你不想解密密码。它应该是单向哈希。要检查密码的有效性,请以相同的方式加密用户输入,并检查计算的散列以匹配数据库中的散列