Ver Fonte

0202 登录功能

Qing há 1 ano atrás
pai
commit
6a4958adc4

+ 1 - 1
novel-demo/src/main/java/com/sf/controller/BookInfoController.java

@@ -2,7 +2,7 @@ package com.sf.controller;
 
 import com.sf.dto.resp.BookInfoRespDto;
 import com.sf.dto.req.BookVisitReqDto;
-import com.sf.resp.RestResp;
+import com.sf.dto.RestResp;
 import com.sf.service.IBookInfoService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;

+ 7 - 2
novel-demo/src/main/java/com/sf/controller/HomeBookController.java

@@ -1,8 +1,10 @@
 package com.sf.controller;
 
 import com.sf.dto.resp.HomeBookRespDto;
-import com.sf.resp.RestResp;
+import com.sf.dto.RestResp;
 import com.sf.service.IHomeBookService;
+import jakarta.servlet.http.HttpServletRequest;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
@@ -17,6 +19,7 @@ import java.util.List;
  * @since 2024-01-29
  */
 //@CrossOrigin(originPatterns = "*", allowCredentials = "true")
+@Slf4j
 @RestController
 @RequestMapping("/api/front/home")
 public class HomeBookController {
@@ -27,11 +30,13 @@ public class HomeBookController {
     // http://127.0.0.1:8888/api/front/home/books
     @GetMapping("/books")
 //    @ResponseBody
-    public RestResp<List<HomeBookRespDto>> books() {
+    public RestResp<List<HomeBookRespDto>> books(HttpServletRequest request) {
         // json结构
         // code  message  data  ok  -> RestResp
         //    [{type:"",bookId:"",...},{type:"",bookId:"",...}]
 //        List<HomeBookRespDto> list = homeBookService.books();
+        String authorization = request.getHeader("Authorization");
+        log.info("authorization: " + authorization);
         List<HomeBookRespDto> list = homeBookService.allBooks();
         // 都取出来 批量查询
         return RestResp.ok(list);

+ 18 - 3
novel-demo/src/main/java/com/sf/controller/UserInfoController.java

@@ -1,15 +1,16 @@
 package com.sf.controller;
 
+import com.sf.dto.req.UserLoginReqDto;
 import com.sf.dto.req.UserRegisterReqDto;
+import com.sf.dto.resp.UserLoginRespDto;
 import com.sf.dto.resp.UserRegisterRespDto;
 import com.sf.dto.resp.VerifyCodeRespDto;
-import com.sf.resp.RestResp;
+import com.sf.dto.RestResp;
 import com.sf.service.IUserInfoService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
-import org.springframework.stereotype.Controller;
 
 /**
  * <p>
@@ -49,4 +50,18 @@ public class UserInfoController {
         logger.info("方法名是:{}, 参数是:{}, 返回结果是:{}", "register", reqDto, respDto);
         return RestResp.ok(respDto);
     }
-}
+
+    @PostMapping("/user/login")
+    public RestResp<UserLoginRespDto> login(@RequestBody UserLoginReqDto reqDto) {
+        logger.info("方法名是:{}, 参数是:{}", "login", reqDto);
+        UserLoginRespDto respDto = userInfoService.login(reqDto);
+        logger.info("方法名是:{}, 参数是:{}, 返回结果是:{}", "login", reqDto, respDto);
+        if (respDto.getType() == 1) {
+            return RestResp.fail("00003", "用户名不存在~", respDto);
+        }
+        if (respDto.getType() == 2) {
+            return RestResp.fail("00004", "密码错误~", respDto);
+        }
+        return RestResp.ok(respDto);
+    }
+}

+ 1 - 2
novel-demo/src/main/java/com/sf/resp/RestResp.java → novel-demo/src/main/java/com/sf/dto/RestResp.java

@@ -1,7 +1,6 @@
-package com.sf.resp;
+package com.sf.dto;
 
 import lombok.Data;
-import lombok.Getter;
 
 //@Getter
 @Data

+ 15 - 0
novel-demo/src/main/java/com/sf/dto/req/UserLoginReqDto.java

@@ -0,0 +1,15 @@
+package com.sf.dto.req;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class UserLoginReqDto {
+    private String username;
+    private String password;
+}

+ 18 - 0
novel-demo/src/main/java/com/sf/dto/resp/UserLoginRespDto.java

@@ -0,0 +1,18 @@
+package com.sf.dto.resp;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class UserLoginRespDto {
+    private Long uid;
+    private String nickName;
+    private String token;
+    // 成功为0  失败如果是用户名问题返回1  如果是密码问题返回2
+    private Integer type;
+}

+ 5 - 0
novel-demo/src/main/java/com/sf/service/IUserInfoService.java

@@ -1,10 +1,13 @@
 package com.sf.service;
 
+import com.sf.dto.req.UserLoginReqDto;
 import com.sf.dto.req.UserRegisterReqDto;
+import com.sf.dto.resp.UserLoginRespDto;
 import com.sf.dto.resp.UserRegisterRespDto;
 import com.sf.dto.resp.VerifyCodeRespDto;
 import com.sf.po.UserInfo;
 import com.baomidou.mybatisplus.extension.service.IService;
+import org.springframework.web.bind.annotation.RequestBody;
 
 /**
  * <p>
@@ -19,4 +22,6 @@ public interface IUserInfoService extends IService<UserInfo> {
     VerifyCodeRespDto imgVerifyCode();
 
     UserRegisterRespDto register(UserRegisterReqDto reqDto);
+
+    UserLoginRespDto login(UserLoginReqDto reqDto);
 }

+ 43 - 1
novel-demo/src/main/java/com/sf/service/impl/UserInfoServiceImpl.java

@@ -2,7 +2,9 @@ package com.sf.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
+import com.sf.dto.req.UserLoginReqDto;
 import com.sf.dto.req.UserRegisterReqDto;
+import com.sf.dto.resp.UserLoginRespDto;
 import com.sf.dto.resp.UserRegisterRespDto;
 import com.sf.dto.resp.VerifyCodeRespDto;
 import com.sf.po.UserInfo;
@@ -69,6 +71,7 @@ public class UserInfoServiceImpl extends ServiceImpl<UserInfoMapper, UserInfo> i
             respDto.setType(2);
             return respDto;
         }
+        map.remove(sessionId);
 
         // 密码往往是通过md5进行加密存储
         // DigestUtils是spring提供的工具类 需要的参数是字节数组
@@ -90,7 +93,46 @@ public class UserInfoServiceImpl extends ServiceImpl<UserInfoMapper, UserInfo> i
 
         respDto.setType(0);
         respDto.setUid(userInfo.getId());
-        respDto.setToken(userInfo.getId().toString());
+        respDto.setToken("token_" + userInfo.getId());
         return respDto;
     }
+
+    @Override
+    public UserLoginRespDto login(UserLoginReqDto reqDto) {
+        // 验证两个条件
+        // 1、用户名是否存在
+        // 2、密码是否正确
+
+        // 用户名或密码有一个不正确
+        // select * from user_info where username = '13654561111' and password = 'e10adc3949ba59abbe56e057f20f883e'
+        String password = DigestUtils.md5DigestAsHex(reqDto.getPassword().getBytes(StandardCharsets.UTF_8));
+        LambdaQueryWrapper<UserInfo> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+        lambdaQueryWrapper.eq(UserInfo::getUsername, reqDto.getUsername()).eq(UserInfo::getPassword, password);
+        UserInfo userInfo = userInfoMapper.selectOne(lambdaQueryWrapper);
+
+        // 如果成功  直接返回成功的数据
+        if (userInfo != null) {
+            return UserLoginRespDto.builder()
+                    .type(0)
+                    .uid(userInfo.getId())
+                    .nickName(userInfo.getNickName())
+                    .token("token_" + userInfo.getId())
+                    .build();
+        }
+
+        // 如果失败 再区分不同的失败原因
+        // select count(*) from user_info where username = '13654561111'
+
+        Long count = userInfoMapper.selectCount(
+                new LambdaQueryWrapper<UserInfo>().eq(
+                        UserInfo::getUsername, reqDto.getUsername()));
+        if (count == 0) {
+            // 用户名不存在
+            return UserLoginRespDto.builder().type(1).build();
+        }
+
+        // 密码错误
+        return UserLoginRespDto.builder().type(2).build();
+
+    }
 }