Przeglądaj źródła

1、添加小程序销售登录后获取用户信息;2、添加登录校验

caoliqin 1 miesiąc temu
rodzic
commit
3e5a25dd9b

+ 2 - 0
fs-company-app/src/main/java/com/fs/app/annotation/Login.java

@@ -9,4 +9,6 @@ import java.lang.annotation.*;
 @Retention(RetentionPolicy.RUNTIME)
 @Documented
 public @interface Login {
+    // 添加一个判断 是否是小程序登录
+    boolean isMiniLogin() default false;
 }

+ 37 - 6
fs-company-app/src/main/java/com/fs/app/controller/WxCompanyUserController.java

@@ -5,11 +5,14 @@ import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
 import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo;
 import cn.binarywang.wx.miniapp.bean.WxMaUserInfo;
 import cn.hutool.core.date.DateTime;
+import com.fs.app.annotation.Login;
 import com.fs.app.param.LoginMaWxParam;
 import com.fs.app.utils.JwtUtils;
 import com.fs.common.core.domain.R;
+import com.fs.common.core.redis.RedisCache;
 import com.fs.common.exception.CustomException;
 import com.fs.common.utils.IpUtil;
+import com.fs.common.utils.ServletUtils;
 import com.fs.company.domain.CompanyDept;
 import com.fs.company.domain.CompanyUser;
 import com.fs.company.service.ICompanyDeptService;
@@ -18,6 +21,7 @@ import com.fs.core.security.SecurityUtils;
 import com.fs.store.service.IFsUserService;
 import com.fs.wx.miniapp.config.WxMaConfiguration;
 import com.fs.wx.miniapp.config.WxMaProperties;
+import io.jsonwebtoken.Claims;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import me.chanjar.weixin.common.error.WxErrorException;
@@ -25,10 +29,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import java.util.Date;
 import java.util.Objects;
@@ -45,14 +46,17 @@ public class WxCompanyUserController extends AppBaseController {
     @Autowired
     JwtUtils jwtUtils;
 
+    @Autowired
+    RedisCache redisCache;
+
     @Autowired
     private ICompanyUserService companyUserService;
 
     @Autowired
     private ICompanyDeptService companyDeptService;
 
-    @ApiOperation("授权登录")
-    @PostMapping("/login")
+    @ApiOperation("小程序-销售授权登录")
+    @PostMapping("/loginByMa")
     public R login(@RequestBody LoginMaWxParam param) {
         if (StringUtils.isBlank(param.getCode())) {
             return R.error("code不存在");
@@ -126,5 +130,32 @@ public class WxCompanyUserController extends AppBaseController {
         }
     }
 
+    @Login(isMiniLogin = true)
+    @ApiOperation("获取销售通过小程序登录后的用户信息")
+    @GetMapping("/getMaUser")
+    public R getUserInfo() {
+        try {
+            CompanyUser companyUser = companyUserService.selectCompanyUserById(Long.parseLong(getUserId()));
+            if (companyUser == null) {
+                return R.error(401, "用户信息不存在");
+            }
+            return R.ok().put("user", companyUser);
+        } catch (Exception e) {
+            return R.error("操作异常");
+        }
+    }
+
+    /**
+     * 特殊要求:销售小程序临时登录,登录后页面中还有一个之前常用的登录,所以为了区分,token名称不能跟之前的一样
+     *
+     * @return 用户id
+     */
+    public String getUserId() {
+        String headValue = ServletUtils.getRequest().getHeader("UserToken");
+        Claims claims = jwtUtils.getClaimByToken(headValue);
+        String userId = claims.getSubject().toString();
+        return userId;
+    }
+
 
 }

+ 11 - 6
fs-company-app/src/main/java/com/fs/app/interceptor/AuthorizationInterceptor.java

@@ -6,6 +6,7 @@ import com.fs.app.annotation.Login;
 import com.fs.app.exception.FSException;
 import com.fs.app.utils.JwtUtils;
 import com.fs.common.core.redis.RedisCache;
+import com.fs.common.utils.ServletUtils;
 import com.fs.common.utils.StringUtils;
 import io.jsonwebtoken.Claims;
 
@@ -43,19 +44,23 @@ public class AuthorizationInterceptor extends HandlerInterceptorAdapter {
         }
 
         //获取用户凭证
-        String token = request.getHeader(jwtUtils.getHeader());
-        if(StringUtils.isBlank(token)){
-            token = request.getParameter(jwtUtils.getHeader());
+        String token;
+        if(!annotation.isMiniLogin()){
+            token = request.getHeader(jwtUtils.getHeader());
+            if(StringUtils.isBlank(token)){
+                token = request.getParameter(jwtUtils.getHeader());
+            }
+        } else {
+            token = ServletUtils.getRequest().getHeader("UserToken");
         }
-
         //凭证为空
         if(StringUtils.isBlank(token)){
-            throw new FSException(jwtUtils.getHeader() + "不能为空", HttpStatus.UNAUTHORIZED.value());
+            throw new FSException(annotation.isMiniLogin() ? "UserToken不能为空" : jwtUtils.getHeader() + "不能为空", HttpStatus.UNAUTHORIZED.value());
         }
 
         Claims claims = jwtUtils.getClaimByToken(token);
         if(claims == null || jwtUtils.isTokenExpired(claims.getExpiration())){
-            throw new FSException(jwtUtils.getHeader() + "失效,请重新登录", HttpStatus.UNAUTHORIZED.value());
+            throw new FSException(annotation.isMiniLogin() ? "UserToken失效,请重新登录" : jwtUtils.getHeader() + "失效,请重新登录", HttpStatus.UNAUTHORIZED.value());
         }
 //        //查询用户的TOKEN是否和REDIS中的一样
 //        String redisToken=redisCache.getCacheObject("token:"+ Long.parseLong(claims.getSubject()));