Vaadin Servlet使用salt-hashed密码登录

时间:2017-03-17 08:55:16

标签: java hash passwords vaadin vaadin7

我们使用Vaadin(7)并使用以下演示作为我们的应用程序的基础:

在开发期间,我的同事(目前正在度假)也对登录做了一些更改。在上面的原始源代码中,我们看到以下login() - 方法:

private void login() {
  if (accessControl.signIn(username.getValue(), password.getValue())) {
    loginListener.loginSuccessful();
  } else {
    showNotification(new Notification("Login failed", 
      "Please check your username and password and try again.", Notification.Type.HUMANIZED_MESSAGE));
    username.focus();
  }
}

在我们的应用程序中,这已更改为:

private void login() {
  try {
    VaadinServletService.getCurrentServletRequest().login(
      this.username.getValue(), this.password.getValue());
    this.loginListener.loginSuccessful();
  } catch (...) {
    // Here we do some things on fail, which is irrelevant for this question
  }
}

不确定它是否相关,但我们有这个UIServlet:

@WebServlet(urlPatterns = "/*", name = "OurUIServlet", asyncSupported = true)
@VaadinServletConfiguration(ui = OurUI.class, productionMode = false)
public static class OurUIServlet extends VaadinServlet {

  private static final long serialVersionUID = -5302116211234266347L;
}

不幸的是,我和Vaadin的经历比我的同事少,所以我有几个问题(他在度假回来时也会问他):

1)首先,我对这个Servlet的登录方法如何知道在哪里查找用户名和密码感到困惑。在我们的(Oracle)数据库中,我们有一个这样的表:

USER:
USR_ID     NUMBER(16, 0)
USR_NAME   VARCHAR2(50 BYTES)
PASSWORD   VARCHAR2(256 BYTES)
... (Full name, email, language, etc.)

配置此Servlet的登录名何时知道要查找USR_NAMEPASSWORD

2)我创建了一个使用PBKDF2WithHmacSHA1作为散列方法的类,包括使用随机盐(当然)。这个类还有一个布尔方法接受一个字符串和一个保存的哈希值,并检查它是否是正确的密码 如果有人想知道它,我可以添加这个类,但它的实现是无关紧要的。您唯一需要知道的是它使用随机盐(这意味着散列总是随机的并且与前一个散列不完全匹配),并且它有一个布尔方法来检查密码是否为哈希值和哈希值de database都代表相同的密码。所以我不能简单地将数据库哈希与生成的哈希进行比较,因为它们是不同的。我必须使用布尔方法。

所以,我的主要问题是我必须在哪里实现这个布尔方法?目前,Servlet的登录名做了一个黑盒子来检查给定的用户名/密码是否与数据库中的用户名/密码匹配,但是如何替换它以便它可以通过用随机盐检查布尔方法来登录?

0 个答案:

没有答案