前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >商城项目-注册功能

商城项目-注册功能

作者头像
cwl_java
发布2020-01-14 14:40:12
8570
发布2020-01-14 14:40:12
举报
文章被收录于专栏:cwl_Javacwl_Java

6.注册功能

6.1.接口说明

在这里插入图片描述
在这里插入图片描述

6.2.controller

代码语言:javascript
复制
/**
 * 注册
 * @param user
 * @param code
 * @return
 */
@PostMapping("register")
public ResponseEntity<Void> register(User user, @RequestParam("code") String code) {
    Boolean boo = this.userService.register(user, code);
    if (boo == null || !boo) {
        return ResponseEntity.status(HttpStatus.BAD_REQUEST).build();
    }
    return new ResponseEntity<>(HttpStatus.CREATED);
}

6.3.service

基本逻辑:

  • 1)校验短信验证码
  • 2)生成盐
  • 3)对密码加密
  • 4)写入数据库
  • 5)删除Redis中的验证码
代码语言:javascript
复制
public Boolean register(User user, String code) {
    String key = KEY_PREFIX + user.getPhone();
    // 从redis取出验证码
    String codeCache = this.redisTemplate.opsForValue().get(key);
    // 检查验证码是否正确
    if (!code.equals(codeCache)) {
        // 不正确,返回
        return false;
    }
    user.setId(null);
    user.setCreated(new Date());
    // 生成盐
    String salt = CodecUtils.generateSalt();
    user.setSalt(salt);
    // 对密码进行加密
    user.setPassword(CodecUtils.md5Hex(user.getPassword(), salt));
    // 写入数据库
    boolean boo = this.userMapper.insertSelective(user) == 1;

    // 如果注册成功,删除redis中的code
    if (boo) {
        try {
            this.redisTemplate.delete(key);
        } catch (Exception e) {
            logger.error("删除缓存验证码失败,code:{}", code, e);
        }
    }
    return boo;
}

6.4.测试

我们通过RestClient测试:

在这里插入图片描述
在这里插入图片描述

查看数据库:

在这里插入图片描述
在这里插入图片描述

6.5.服务端数据校验

刚才虽然实现了注册,但是服务端并没有进行数据校验,而前端的校验是很容易被有心人绕过的。所以我们必须在后台添加数据校验功能:

我们这里会使用Hibernate-Validator框架完成数据校验:

而SpringBoot的web启动器中已经集成了相关依赖:

在这里插入图片描述
在这里插入图片描述

6.5.1.什么是Hibernate Validator

Hibernate Validator是Hibernate提供的一个开源框架,使用注解方式非常方便的实现服务端的数据校验。

官网:http://hibernate.org/validator/

在这里插入图片描述
在这里插入图片描述

hibernate Validator 是 Bean Validation 的参考实现 。

Hibernate Validator 提供了 JSR 303 规范中所有内置 constraint(约束) 的实现,除此之外还有一些附加的 constraint。

在日常开发中,Hibernate Validator经常用来验证bean的字段,基于注解,方便快捷高效。

6.5.2.Bean校验的注解

常用注解如下:

Constraint

详细信息

@Valid

被注释的元素是一个对象,需要检查此对象的所有字段值

@Null

被注释的元素必须为 null

@NotNull

被注释的元素必须不为 null

@AssertTrue

被注释的元素必须为 true

@AssertFalse

被注释的元素必须为 false

@Min(value)

被注释的元素必须是一个数字,其值必须大于等于指定的最小值

@Max(value)

被注释的元素必须是一个数字,其值必须小于等于指定的最大值

@DecimalMin(value)

被注释的元素必须是一个数字,其值必须大于等于指定的最小值

@DecimalMax(value)

被注释的元素必须是一个数字,其值必须小于等于指定的最大值

@Size(max, min)

被注释的元素的大小必须在指定的范围内

@Digits (integer, fraction)

被注释的元素必须是一个数字,其值必须在可接受的范围内

@Past

被注释的元素必须是一个过去的日期

@Future

被注释的元素必须是一个将来的日期

@Pattern(value)

被注释的元素必须符合指定的正则表达式

@Email

被注释的元素必须是电子邮箱地址

@Length

被注释的字符串的大小必须在指定的范围内

@NotEmpty

被注释的字符串的必须非空

@Range

被注释的元素必须在合适的范围内

@NotBlank

被注释的字符串的必须非空

@URL(protocol=,host=, port=,regexp=, flags=)

被注释的字符串必须是一个有效的url

@CreditCardNumber

被注释的字符串必须通过Luhn校验算法,银行卡,信用卡等号码一般都用Luhn计算合法性

6.5.3.给User添加校验

我们在ly-user-interface中添加Hibernate-Validator依赖:

代码语言:javascript
复制
        <dependency>
            <groupId>org.hibernate.validator</groupId>
            <artifactId>hibernate-validator</artifactId>
        </dependency>

我们在User对象的部分属性上添加注解:

代码语言:javascript
复制
@Table(name = "tb_user")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    @Length(min = 4, max = 30, message = "用户名只能在4~30位之间")
    private String username;// 用户名

    @JsonIgnore
    @Length(min = 4, max = 30, message = "用户名只能在4~30位之间")
    private String password;// 密码

    @Pattern(regexp = "^1[35678]\\d{9}$", message = "手机号格式不正确")
    private String phone;// 电话

    private Date created;// 创建时间

    @JsonIgnore
    private String salt;// 密码的盐值
}

6.5.4.在controller上进行控制

在controller中只需要给User添加 @Valid注解即可。

在这里插入图片描述
在这里插入图片描述

6.5.5.测试

我们故意填错:

在这里插入图片描述
在这里插入图片描述

然后SpringMVC会自动返回错误信息:

在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 6.注册功能
    • 6.1.接口说明
      • 6.2.controller
        • 6.3.service
          • 6.4.测试
            • 6.5.服务端数据校验
              • 6.5.1.什么是Hibernate Validator
              • 6.5.2.Bean校验的注解
              • 6.5.3.给User添加校验
              • 6.5.4.在controller上进行控制
              • 6.5.5.测试
          相关产品与服务
          验证码
          腾讯云新一代行为验证码(Captcha),基于十道安全栅栏, 为网页、App、小程序开发者打造立体、全面的人机验证。最大程度保护注册登录、活动秒杀、点赞发帖、数据保护等各大场景下业务安全的同时,提供更精细化的用户体验。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档