乐优商城项目---day16-用户注册(阿里大于及hibernate-validate)

1.创建用户中心

用户搜索到自己心仪的商品,接下来就要去购买,但是购买必须先登录。所以接下来我们编写用户中心,实现用户的登录和注册功能。

用户中心的提供的服务:

  • 用户的注册

  • 用户登录

  • 用户个人信息管理

  • 用户地址管理

  • 用户收藏管理

  • 我的订单

  • 优惠券管理

这里我们暂时先实现基本的:注册和登录功能,其它功能大家可以自行补充完整。

因为用户中心的服务其它微服务也会调用,因此这里我们做聚合。

leyou-user:父工程,包含2个子工程:

  • leyou-user-interface:实体及接口

  • leyou-user-service:业务和服务

关于工程搭建:leyou-user 微服务因为这个微服务视频中没有讲解,不过搭建的过程和前面的一模一样,照着比较,先创建模块在搭建依赖,在写引导类,最后在启动就可用了,没有任何差别

Controller:测试:

 @GetMapping("/check/{data}/{type}")
    public ResponseEntity<Boolean> checkUser(@PathVariable("data")String data,@PathVariable("type")Integer type){
        Boolean bool=this.userService.checkUser(data,type);
        if (bool==null){
         return   ResponseEntity.badRequest().build();
        }return ResponseEntity.ok(bool);
    }

Service:

  @Autowired
    private UserMapper userMapper;

    public Boolean checkUser(String data, Integer type) {
        User user=new User();
        if (type==1){
            user.setUsername(data);
        }else if (type==2){
            user.setPhone(data);
        }else {
            return null;
        }
        return this.userMapper.selectCount(user)==0;

    }

完成测试:已经存在的用户名返回的事false,不存在的返回的事true 

阿里大于的短信模板,安装第三方sdk到本地,建议使用通用的办法安装,成功的机率更大

mvn install:install-file -DgroupId=com.aliyun -DartifactId=aliyun-java-sdk-core -Dversion=3.3.1 -Dfile=aliyun-java-sdk-core-3.3.1.jar -Dpackaging=jar



mvn install:install-file -DgroupId=com.aliyun -DartifactId=aliyun-java-sdk-dysmsapi -Dversion=1.0.0 -Dfile=aliyun-java-sdk-dysmsapi-1.0.0.jar -Dpackaging=jar

成功安装到本地仓库

开始进行测试导入项目,没有报依赖错误

短信接口返回成功:

开始创建短信微服务:

搭建模块,引入依赖,导入相应得yml文件和之前得操作一样,因为RabbitM要监听到所以在加个消费者

 成功监听到了

Linux安装Redis安装笔记进行安装,基本没有问题,中间得脚本一定要复制全,如果缺少东西,可能回早吃,redis,不支持checkconfig

Redis得测试

发送短信得测试通过:

Controller:

   @PostMapping("code")
    public ResponseEntity<Void> register(@RequestParam("phone") String phone){
        this.userService.sendVefyCode(phone);
        return   ResponseEntity.status(HttpStatus.CREATED).build();
    }

Service:这里面一定要用StringRedisTemplage 不然回出现乱码

 public void sendVefyCode(String phone) {
        String code = NumberUtils.generateCode(6);
        if (StringUtils.isBlank(phone)){
            return;
        }
        Map<String,String> msg=new HashMap<>();
        msg.put("phone",phone);
        msg.put("code",code);
        this.amqpTemplate.convertAndSend("leyou.sms.exchange","sms.verify.code",msg);
        this.redisTemplate.opsForValue().set(KEY_PREFIX+phone,code,5,TimeUnit.MINUTES);
    }

验证码接收成功:

下来是用户注册得接口:

Controller:

 /**
     * 注册用户得接口
     */
    @PostMapping("register")
    public ResponseEntity<Void> register(User user,@RequestParam("code") String code){
        this.userService.register(user,code);
        return  ResponseEntity.status(HttpStatus.CREATED).build();
    }

Service:

    public void register(User user, String code) {
        String redisCode = redisTemplate.opsForValue().get(KEY_PREFIX + user.getPhone());
        if (!StringUtils.equals(redisCode,code)){
            return;
        }
        String salt = CodecUtils.generateSalt();
        user.setSalt(salt);
        user.setPassword(CodecUtils.md5Hex(user.getPassword(),salt));
        user.setId(null);
        user.setCreated(new Date());
        this.userMapper.insert(user);
    }

完成测试:

查询用户接口

Controller:

  /**
     * 查询用户
     */
    @GetMapping("query")
    public ResponseEntity<User> query(@RequestParam("username") String username,@RequestParam("password")String password){
      User user=  this.userService.query(username,password);
        if (user==null){
            return  ResponseEntity.badRequest().build();
        }
        return ResponseEntity.ok(user);
    }

Service:

   public User query(String username, String password) {
        User record=new User();
        record.setUsername(username);
        User user = this.userMapper.selectOne(record);
        if (user==null){
            return null;
        }
        password=CodecUtils.md5Hex(password,user.getSalt());
        if (StringUtils.equals(password,user.getPassword())){
            return user;
        }
        return null;

    }

整合到乐友得界面

注册成功

今日总结


1.用户名和手机号的校验
    判断type的值
    1:校验用户名
    2:校验手机号
    使用selectCount(record)==0

2.发送短信功能
    阿里大于
        参照demo工程
    redis
        安装
        SDR使用:StringRedisTemplate
    搭建了一个微服务:sms-service,监听rabbitmq的队列,获取到消息之后发送短信
    
    1.生成验证码
    2.发送消息给rabbitMQ的队列
    3.保存验证码到redis中
    
3.注册功能:
    1.校验验证码
    2.生成盐
    3.加盐加密
    4.新增用户

    hibernate-validate:对bean Validate(JSR303 规范)的实现
    提供了一系列的注解,通过注解就可以校验数据的合法性
    @Valid
    
    
4.查询用户(用户名和密码)
    1.根据用户查询用户
    2.判断用户是否存在
    3.对用户输入的密码加盐加密
    4.对密码进行比较


 

发布了143 篇原创文章 · 获赞 16 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/zgz102928/article/details/104573597