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

1 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()
    ......

}
Run Code Online (Sandbox Code Playgroud)

我几乎没有问题

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

thr*_*ups 5

首先,我要看一下您是否可以使用其他身份验证系统,如Google或Facebook,或Open ID(StackOverflow使用这些以及更多).

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

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

  • 始终使用单向散列机制(例如SHA)存储密码
  • 在对您的密码进行散列时使用salt - 每个密码应该有一个随机的salt值(请参阅此SO问题的长度)
  • 您还可以拥有一个不存储在密码旁边的应用程序范围的常量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;
Run Code Online (Sandbox Code Playgroud)

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

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

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