Spring Boot实现用户注册验证全过程

如题所述

第1个回答  2022-07-21

在这篇文章中,我们将使用Spring Boot实现一个基本的邮箱注册账户以及验证的过程。

我们的目标是添加一个完整的注册过程,允许用户注册,验证,并持久化用户数据。

首先,我们需要一个DTO来囊括用户的注册信息。这个对象应该包含我们在注册和验证过程中所需要的基本信息。

例2.1 UserDto的定义

请注意我们在DTO对象的字段上使用了标准的javax.validation注解——@NotBlank。

@NotEmpty: 适用于CharSequence, Collection, Map 和 Array 对象,不能是null并且相关对象的size大于0。
@NotBlank: 该注解只能作用于String类型。String非null且去除两端空白字符后的长度(trimmed length)大于0。

在下面的章节里,我们还将自定义注解来验证电子邮件地址的格式以及确认二次密码。

登录页面上的注册链接将用户带到注册页面:

例3.1 RegistrationController的定义

当RegistrationController收到请求/user/registration时,它创建了新的UserDto对象,将其绑定在Model上,并返回了注册页面registration.html。

接下来,让我们看看控制器在注册新账户时将执行的验证:

对于简单的检查,我们将使用@NotBlank来验证DTO对象。

为了触发验证过程,我们将在Controller中用@Valid注解来验证对象。

例4.1 registerUserAccount

下一步,让我们验证电子邮件地址,以保证它的格式是正确的。我们将为此建立一个自定义验证器,以及一个自定义验证注解--IsEmailValid。

下面是电子邮件验证注解IsEmailValid和自定义验证器EmailValidator:

例4.2.1 IsEmailVaild注解的定义

例4.2.2 EmailValidator的定义

现在让我们在我们的UserDto实现上使用新注解。

我们还需要一个自定义注解和验证器,以确保UserDto中的password和repeatedPassword字段相匹配。

例4.3.1 IsPasswordMatching注解的定义

请注意,@Target注解表明这是一个Type级别的注解。这是因为我们需要整个UserDto对象来执行验证。

例4.3.2 PasswordMatchingValidator的定义

现在,将@IsPasswordMatching注解应用到我们的UserDto对象。

我们要实现的第四个检查是验证该电子邮件帐户在数据库中是否已经存在。

这是在表单被验证后进行的,我们把这项验证放在了UserService。

例4.4.1 UserService

UserService依靠UserRepository类来检查数据库中是否已存在拥有相同邮箱的用户账户。当然在本文中我们不会涉及到UserRepository的实现。

然后我们继续实现RegistrationController中的持久化逻辑。

在上面的代码中我们可以发现:

1、我们创建了ModelAndView对象,该对象既可以保存数据也可以返回一个View。

2、在注册的过程中如果产生任何报错,将会返回到注册页面。

在本节内容中,我们将实现一个自定义的UserDetailsService,从持久层检查登录的凭证。

让我们从自定义UserDetailsService开始。

例6.1.1 MyUserDetailsService

然后,为了真正地能够开启自定义的MyUserDetailsService,我们还需要在SecurityConfig配置文件中加入以下代码:

限于篇幅,我们就不在这里详细展开SecurityConfig配置文件。至此我们完成了一个由Spring Boot实现的基本的用户注册过程。

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网