Jelajahi Sumber

用户登录完成

wangzhengliang 3 tahun lalu
induk
melakukan
3e64293ae4

+ 32 - 9
src/main/java/com/chuanghai/ihotel/controller/HotelUserController.java

@@ -1,14 +1,22 @@
 package com.chuanghai.ihotel.controller;
 
+import com.chuanghai.ihotel.anno.UserLoginCheck;
+import com.chuanghai.ihotel.aop.LoginCheckAspect;
+import com.chuanghai.ihotel.common.utils.CommonResult;
+import com.chuanghai.ihotel.dto.LoginUserDTO;
+import com.chuanghai.ihotel.entity.HotelUserEntity;
 import com.chuanghai.ihotel.service.HotelUserService;
 import com.chuanghai.ihotel.vo.LoginUserVO;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestHeader;
 import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
 
 /**
  * 普通用户
@@ -17,7 +25,7 @@ import org.springframework.web.bind.annotation.RestController;
  * @email codingliang@gmail.com
  * @date 2022-07-27 10:02:04
  */
-@RestController
+@Controller
 @RequestMapping("hotelUser")
 public class HotelUserController {
 
@@ -30,7 +38,7 @@ public class HotelUserController {
      * 微校授权回调地址
      *
      * @apiNote 用户跳转到微校授权链接上,微校服务器接收用户授权后会携带wxcode回调到该接口上,该接口使用wxcode获取到用户的信息。
-     *          如果用户信息获取成功,该接口会以 【fontEndUrl + /?loginUserVO={}】 的形式跳回到前端应用页面;
+     *          如果用户信息获取成功,该接口会以 【fontEndUrl + /?token=】 的形式跳回到前端应用页面;
      *          如果用户信息获取失败,该接口会以 【fontEndUrl + /error/?errorMsg=获取用户信息失败】 的形式跳回到前端应用页面。
      *          <strong>注意:</strong>
      *          fontEndUrl + 路由地址:前端项目地址+页面路由地址,用于前端页面接收用户的信息或错误信息,该地址需要前端人员与后台开发人员协调好。
@@ -40,14 +48,29 @@ public class HotelUserController {
      * @return
      */
     @GetMapping("weixiaoAuth")
-    public String weixiaoAuth(String wxcode, String state) throws JsonProcessingException {
+    public String weixiaoAuth(String wxcode, String state) throws UnsupportedEncodingException {
+        System.out.println("code==>" + wxcode);
         LoginUserVO loginUserVO = hotelUserService.weixiaoAuth(wxcode, state);
 
         if (loginUserVO != null) {
-            ObjectMapper objectMapper = new ObjectMapper();
-            return "redirect:" + fontEndUrl + "/#/pages/blankIndex/blankIndex/?loginUserVO=" + objectMapper.writeValueAsString(loginUserVO);
+            return "redirect:" + fontEndUrl + "/#/pages/blankIndex/blankIndex/?token=" + loginUserVO.getToken() + "&tokenTtl=" + loginUserVO.getTokenTtl();
         } else {
-            return "redirect:" + fontEndUrl + "/#/error/?errorMsg=获取用户信息失败";
+            return "redirect:" + fontEndUrl + "/#/error/?errorMsg=" + URLEncoder.encode("获取用户信息失败", "utf-8");
         }
     }
+
+    /**
+     * 获取用户信息
+     * @param userToken 用户token
+     * @return
+     */
+    @UserLoginCheck
+    @ResponseBody
+    @GetMapping("userInfo")
+    public CommonResult<HotelUserEntity> getUserInfoByToken(@RequestHeader("user_token") String userToken) {
+        LoginUserDTO dto = LoginCheckAspect.threadLocal.get();
+        HotelUserEntity vo = hotelUserService.findByCardNumber(dto.getCardNumber());
+
+        return CommonResult.ok().setResult(vo);
+    }
 }

+ 3 - 0
src/main/java/com/chuanghai/ihotel/service/impl/HotelUserServiceImpl.java

@@ -15,6 +15,8 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Service;
+import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.util.MultiValueMap;
 import org.springframework.web.client.RestTemplate;
 
 import java.util.HashMap;
@@ -74,6 +76,7 @@ public class HotelUserServiceImpl extends ServiceImpl<HotelUserDao, HotelUserEnt
             // 用户信息生成token返回
             return generateToken(cardNumber, name, identityType);
         } catch (Exception e) {
+            log.error("微校授权失败【{}】", e.getMessage());
             return null;
         }
     }

+ 5 - 1
src/main/java/com/chuanghai/ihotel/util/JWTUtil.java

@@ -54,11 +54,15 @@ public class JWTUtil {
             throw new NullPointerException("对象为空");
         }
 
+        String adminIdStr = "";
+        if (loginUser.getAdminId() != null) {
+            adminIdStr = loginUser.getAdminId().toString();
+        }
         String token = Jwts.builder().setSubject(SUBJECT)
                 //配置payload
                 .claim("card_number", loginUser.getCardNumber())
                 .claim("identity_type", loginUser.getIdentityType())
-                .claim("admin_id", loginUser.getAdminId().toString())
+                .claim("admin_id", adminIdStr)
                 .setIssuedAt(new Date())
                 .setExpiration(new Date(CommonUtil.getCurrentTimestamp() + EXPIRED))
                 .signWith(SignatureAlgorithm.HS256, SECRET).compact();