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.对密码进行比较