图片.png图片.png

一、新建用户微服务

1、在service模块下创建子模块service-ucenter图片.png

2、使用代码生成器生成代码

(1)创建ucenter_member表

图片.png

(2)生成代码

图片.png**

3、配置application.properties

  1. # 服务端口
  2. server.port=8005
  3. # 服务名
  4. spring.application.name=service-ucenter
  5. # mysql数据库连接
  6. spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
  7. spring.datasource.url=jdbc:mysql://localhost:3306/guli?serverTimezone=GMT%2B8
  8. spring.datasource.username=root
  9. spring.datasource.password=root
  10. spring.redis.host=192.168.44.131
  11. spring.redis.port=6379
  12. spring.redis.database= 0
  13. spring.redis.timeout=1800000
  14. spring.redis.lettuce.pool.max-active=20
  15. spring.redis.lettuce.pool.max-wait=-1
  16. #最大阻塞等待时间(负数表示没限制)
  17. spring.redis.lettuce.pool.max-idle=5
  18. spring.redis.lettuce.pool.min-idle=0
  19. #最小空闲
  20. #返回json的全局时间格式
  21. spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
  22. spring.jackson.time-zone=GMT+8
  23. #配置mapper xml文件的路径
  24. mybatis-plus.mapper-locations=classpath:com/atguigu/cmsservice/mapper/xml/*.xml
  25. #mybatis日志
  26. mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

4、创建启动类

创建ServiceUcApplication.java

  1. @ComponentScan({"com.atguigu"})
  2. @SpringBootApplication//取消数据源自动配置
  3. @MapperScan("com.atguigu.ucenterservice.mapper")
  4. public class ServiceUcApplication {
  5. public static void main(String[] args) {
  6. SpringApplication.run(ServiceUcApplication.class, args);
  7. }
  8. }

二、创建登录和注册接口

1、创建LoginVo和RegisterVo用于数据封装

LoginVo

  1. @Data
  2. @ApiModel(value="登录对象", description="登录对象")
  3. public class LoginVo {
  4. @ApiModelProperty(value = "手机号")
  5. private String mobile;
  6. @ApiModelProperty(value = "密码")
  7. private String password;
  8. }

RegisterVo

  1. @Data
  2. @ApiModel(value="注册对象", description="注册对象")
  3. public class RegisterVo {
  4. @ApiModelProperty(value = "昵称")
  5. private String nickname;
  6. @ApiModelProperty(value = "手机号")
  7. private String mobile;
  8. @ApiModelProperty(value = "密码")
  9. private String password;
  10. @ApiModelProperty(value = "验证码")
  11. private String code;
  12. }

2、创建controller编写登录和注册方法

MemberApiController.java

  1. @RestController
  2. @RequestMapping("/ucenterservice/apimember")
  3. @CrossOrigin
  4. public class MemberApiController {
  5. @Autowired
  6. private MemberService memberService;
  7. @ApiOperation(value = "会员登录")
  8. @PostMapping("login")
  9. public R login(@RequestBody LoginVo loginVo) {
  10. String token = memberService.login(loginVo);
  11. return R.ok().data("token", token);
  12. }
  13. @ApiOperation(value = "会员注册")
  14. @PostMapping("register")
  15. public R register(@RequestBody RegisterVo registerVo){
  16. memberService.register(registerVo);
  17. return R.ok();
  18. }
  19. }

3、创建service接口和实现类

  1. @Service
  2. public class MemberServiceImpl extends ServiceImpl<MemberMapper, Member> implements MemberService {
  3. @Autowired
  4. private RedisTemplate<String, String> redisTemplate;
  5. /**
  6. * 会员登录
  7. * @param loginVo
  8. * @return
  9. */
  10. @Override
  11. public String login(LoginVo loginVo) {
  12. String mobile = loginVo.getMobile();
  13. String password = loginVo.getPassword();
  14. //校验参数
  15. if(StringUtils.isEmpty(mobile) ||
  16. StringUtils.isEmpty(password) ||
  17. StringUtils.isEmpty(mobile)) {
  18. throw new GuliException(20001,"error");
  19. }
  20. //获取会员
  21. Member member = baseMapper.selectOne(new QueryWrapper<Member>().eq("mobile", mobile));
  22. if(null == member) {
  23. throw new GuliException(20001,"error");
  24. }
  25. //校验密码
  26. if(!MD5.encrypt(password).equals(member.getPassword())) {
  27. throw new GuliException(20001,"error");
  28. }
  29. //校验是否被禁用
  30. if(member.getIsDisabled()) {
  31. throw new GuliException(20001,"error");
  32. }
  33. //使用JWT生成token字符串
  34. String token = JwtUtils.getJwtToken(member.getId(), member.getNickname());
  35. return token;
  36. }
  37. /**
  38. * 会员注册
  39. * @param registerVo
  40. */
  41. @Override
  42. public void register(RegisterVo registerVo) {
  43. //获取注册信息,进行校验
  44. String nickname = registerVo.getNickname();
  45. String mobile = registerVo.getMobile();
  46. String password = registerVo.getPassword();
  47. String code = registerVo.getCode();
  48. //校验参数
  49. if(StringUtils.isEmpty(mobile) ||
  50. StringUtils.isEmpty(mobile) ||
  51. StringUtils.isEmpty(password) ||
  52. StringUtils.isEmpty(code)) {
  53. throw new GuliException(20001,"error");
  54. }
  55. //校验校验验证码
  56. //从redis获取发送的验证码
  57. String mobleCode = redisTemplate.opsForValue().get(mobile);
  58. if(!code.equals(mobleCode)) {
  59. throw new GuliException(20001,"error");
  60. }
  61. //查询数据库中是否存在相同的手机号码
  62. Integer count = baseMapper.selectCount(new QueryWrapper<Member>().eq("mobile", mobile));
  63. if(count.intValue() > 0) {
  64. throw new GuliException(20001,"error");
  65. }
  66. //添加注册信息到数据库
  67. Member member = new Member();
  68. member.setNickname(nickname);
  69. member.setMobile(registerVo.getMobile());
  70. member.setPassword(MD5.encrypt(password));
  71. member.setIsDisabled(false);
  72. member.setAvatar("http://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83eoj0hHXhgJNOTSOFsS4uZs8x1ConecaVOB8eIl115xmJZcT4oCicvia7wMEufibKtTLqiaJeanU2Lpg3w/132");
  73. this.save(member);
  74. }
  75. }

三、创建接口根据token获取用户信息

1、在MemberApiController中创建方法

  1. @ApiOperation(value = "根据token获取登录信息")
  2. @GetMapping("auth/getLoginInfo")
  3. public R getLoginInfo(HttpServletRequest request){
  4. try {
  5. String memberId = JwtUtils.getMemberIdByJwtToken(request);
  6. LoginInfoVo loginInfoVo = memberService.getLoginInfo(memberId);
  7. return R.ok().data("item", loginInfoVo);
  8. }catch (Exception e){
  9. e.printStackTrace();
  10. throw new GuliException(20001,"error");
  11. }
  12. }

2、创建service

  1. @Override
  2. public LoginInfoVo getLoginInfo(String memberId) {
  3. Member member = baseMapper.selectById(memberId);
  4. LoginInfoVo loginInfoVo = new LoginInfoVo();
  5. BeanUtils.copyProperties(member, loginInfoVo);
  6. return loginInfoVo;
  7. }