每次访问变量时随机数都会更改

时间:2017-03-08 18:32:16

标签: java random

我正在尝试生成然后保存一个随机数。

但是每次我访问包含随机String的变量时,都会重新创建它,然后将变量设置为新的随机String。我无法理解为什么访问变量正在改变它。

我正在构建一些“忘记密码”功能。

主要类看起来像这样:

public class PasswordRecoverer{

@Id
public ObjectId id;
public String email;
public String key;
public Long expires;

public PasswordRecoverer create(String email){

    this.email = email;
    this.key = getKey();
    Calendar cal =  Calendar.getInstance();
    this.expires = cal.getTimeInMillis() + 3600000; // expires in 1hr

    return this;
}

// more code here ...

}

我在控制器类中访问(并打印)key变量,每次都可以看到它发生变化。

我在下面使用的顺便说一句p.rint()只是class.method()的{​​{1}}简写

public class App扩展Controller {

public static void resetPassword(String email){

System.out.println()

我每次PasswordRecoverer pr = new PasswordRecoverer(); p.rint(1, pr.key); if(new PasswordRecoverer().read(email)==null){ p.rint(2, pr.key); pr = new PasswordRecoverer().create(email); p.rint(3,pr.key); } else{ p.rint(4,pr.key); pr = new PasswordRecoverer().update(email); p.rint(5,pr.key); } p.rint(6, pr.key); pr.save(); p.rint(7,pr.key); p.rint(pr.key); p.rint(8,pr.key); render("App/forgot-pwd.html") } } ... p.rint(x,pr.key)都有不同的价值。我希望每次都这样。

1 个答案:

答案 0 :(得分:0)

问题是因为您正在实例化每个打印件PasswordRecover,而后者又会获得一个新密钥。

可能的解决方案

似乎每个新的PasswordRecover类都需要一个唯一的密钥。但是不要使用新的构造函数,而是使用create(email);

if(email!= null){
PasswordRecoverer pr = PasswordRecoverer.create(email);
    p.rint(1, pr.key);
    }
   else{
       // Logic for when you do not have email
    }
    p.rint(6, pr.key);
    pr.save();
    p.rint(7,pr.key);
    p.rint(pr.key);
    p.rint(8,pr.key);

pr.save();

render("App/forgot-pwd.html")
  }
}