在web应用程序Java Spring MVC中编程用户注册

在web应用程序Java Spring MVC中编程用户注册,java,authentication,spring-mvc,Java,Authentication,Spring Mvc,我正在构建web应用程序,其中我正在构建具有用户注册和登录的第一阶段 我在想 class User { private userid; private firstname ......... //getters and setters } class UserService { public boolean authenticate(username, password) {} public addUser() public save

我正在构建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()
    ......

}
我有几个问题

  • 我的方法正确吗
  • 另外,我在前端和后端管理用户都有diff函数,所以我应该把所有的都放在一个类中,还是,我必须为前端和后端做diff
  • 因为这是每个组织都需要的最常见的东西,所以有可能从互联网上找到它,这样我就可以看到企业人员是如何做到这一点的

  • 首先,我想看看你是否可以使用另一种身份验证系统,如谷歌或Facebook,或开放ID(StackOverflow使用这些和更多)

    其次,我会考虑使用一个安全框架,比如

    最后,如果你想/需要自己从头开始做这件事,这里有一些建议

    • 始终使用单向散列机制(例如SHA)存储密码
    • 在对密码进行哈希运算时使用-每个密码应该有一个随机的salt值(请参阅以了解其长度)
    • 您还可以有一个不存储在密码旁边的恒定应用程序范围的salt值
    • 赋予用户角色。这将解决前端/后端用户的问题
    我假设你在使用数据库。下面是一个示例模式(MySQL)

    对于一个非常基本的用户模型就可以了。你需要一个工具来生成盐。我会使用ApacheCommonsLang

    您可能需要添加一些东西来锁定登录尝试失败次数过多的用户帐户。您可能需要跟踪他们登录的IP地址。这是留给读者的练习:)


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

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

    其次,我会考虑使用一个安全框架,比如

    最后,如果你想/需要自己从头开始做这件事,这里有一些建议

    • 始终使用单向散列机制(例如SHA)存储密码
    • 在对密码进行哈希运算时使用-每个密码应该有一个随机的salt值(请参阅以了解其长度)
    • 您还可以有一个不存储在密码旁边的恒定应用程序范围的salt值
    • 赋予用户角色。这将解决前端/后端用户的问题
    我假设你在使用数据库。下面是一个示例模式(MySQL)

    对于一个非常基本的用户模型就可以了。你需要一个工具来生成盐。我会使用ApacheCommonsLang

    您可能需要添加一些东西来锁定登录尝试失败次数过多的用户帐户。您可能需要跟踪他们登录的IP地址。这是留给读者的练习:)


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

    我认为,Spring为创建具有角色分配的用户、有力地验证用户以及维护应用程序的安全性提供了非常好的方法。不需要将整个应用程序实现为我们自己的应用程序,您可以使用spring security。


    您可以自己创建用户,也可以使用上述安全插件进行身份验证。

    我认为,Spring提供了非常好的方法来创建具有角色分配的用户,并对用户进行强有力的身份验证,同时还可以维护应用程序的安全性。不需要将整个应用程序实现为我们自己的应用程序,您可以使用spring security。


    您也可以自己创建用户,使用上述安全插件进行身份验证。

    请不要推荐acegi。它只是SpringSecurity2.0.x的一个旧的和不推荐的版本。Spring Security的当前版本是3.0.x感谢您的建议,我已经更改了答案并删除了acegi安全性。请不要推荐acegi。它只是SpringSecurity2.0.x的一个旧的和不推荐的版本。Spring Security的当前版本是3.0.x感谢您的建议,我已经更改了答案并删除了acegi安全性。
    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;