编程Web应用程序Java Spring MVC中的用户注册

时间:2011-02-25 04:52:40

标签: java authentication spring-mvc

我正在构建Web应用程序,我正在构建第一个用户注册和登录阶段。

我在考虑

class User 
{
    private userid;
    private firstname
    .........
    //getters and setters
}

class UserService {

    public boolean authenticate(username, password) {}
    public addUser()
    public saveuser()
    public ConfirmEmail()
    public resetPassword()
    ......

}

我的问题很少

  1. 我的方法是否正确?
  2. 我也有前端和后端管理员用户的差异功能,所以我应该将所有内容放在一个类中,或者我必须为前端和后端制作差异?
  3. 由于这是每个组织最常见的事情,因此可以从互联网上找到它,以便我可以看到企业人员如何处理这个问题?

2 个答案:

答案 0 :(得分:5)

首先,我会考虑您是否可以使用其他身份验证系统,例如Google或Facebook,或Open ID(StackOverflow使用这些以及更多)。

其次,我会考虑使用像Spring Security这样的安全框架。

最后,如果您想要/需要从头开始自己动手,这里有一些指示

  • 始终使用单向散列机制存储密码,例如SHA
  • 在对您的密码进行哈希处理时使用salt - 您应该为每个密码设置一个随机盐值(请参阅this SO question了解其长度)
  • 您还可以拥有一个不存储在密码
  • 旁边的应用程序范围的常量salt值
  • 授予用户角色。这将解决您的前端/后端用户问题

我假设您正在使用数据库。这是一个示例模式(MySQL)

CREATE TABLE users (
  id INTEGER UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT
  mail VARCHAR(255) NOT NULL,
  name VARCHAR(255) NOT NULL,
  enc_password VARCHARCHAR(64) NOT NULL,
  salt CHAR(8) NOT NULL,
  is_mail_authenticated TINYINT(1) UNSIGNED NOT NULL DEFAULT 0,
  UNIQUE KEY (mail)
) ENGINE = InnoDB;

CREATE TABLE roles (
  id INTEGER UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT
  name VARCHAR(32) NOT NULL,
  UNIQUE KEY (name)
) ENGINE = InnoDB;

CREATE TABLE users_roles (
  user_id NTEGER UNSIGNED NOT NULL,
  role_id NTEGER UNSIGNED NOT NULL,
  FOREIGN KEY (user_id) REFERENCES users (id),
  FOREIGN KEY (roel_id) REFERENCES roles (id),
) ENGINE = InnoDB;

这将是一个非常基本的用户模型。你需要一个生成盐的工具。我将使用Apache commons lang中的randomAlphanumeric

您可能希望在登录失败次数过多后添加一些内容来锁定用户帐户。您可能希望跟踪他们登录的IP。这留给读者一个练习:)

我添加了is_mail_authenticated字段来跟踪用户是否已对其邮件进行身份验证。这通常是通过点击某人电子邮件中的链接来完成的。

答案 1 :(得分:0)

我认为,Spring提供了非常好的方法来创建具有角色分配的用户并强有力地验证用户,并且还维护安全性或应用程序。无需实现整个作为我们自己的应用程序,您可以使用spring security。 http://static.springsource.org/spring-security/site/start-here.html

您可以使用上述安全插件自行创建用户。