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

how to persist fos_user data from java desktop application

我们是一个使用 SCRUM 方法开展项目的团队中的五名学生。 我们的第一个冲刺是 WEB 应用程序...... 现在,我们正在进行第二个冲刺,即 JAVA 的桌面应用程序。 在第一个 sprint(Sprint Web)中,我们使用 FOS_USER Bundle 创建了我们的数据库,这个数据库包含 'User' table,他的 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 工具从数据库中生成了实体,我们得到了这个 class(一些属性):

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;
}

现在,我们需要将一个用户对象持久化(/进行身份验证)到(/从)这个数据库中,但问题是,密码是用 FOS_USER Bundle.So 加密的顺便给decrepte/encrypte这个密码。 我们的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);
    }
}

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