Bläddra i källkod

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	alien-gateway/pom.xml
ssk 1 månad sedan
förälder
incheckning
5027c3538b

+ 62 - 3
alien-gateway/src/main/java/shop/alien/gateway/config/JwtTokenFilter.java

@@ -2,22 +2,31 @@ package shop.alien.gateway.config;
 
 import com.alibaba.cloud.commons.lang.StringUtils;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import io.jsonwebtoken.Claims;
 import io.jsonwebtoken.ExpiredJwtException;
 import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.cloud.gateway.filter.GatewayFilterChain;
 import org.springframework.cloud.gateway.filter.GlobalFilter;
 import org.springframework.core.Ordered;
 import org.springframework.core.io.buffer.DataBuffer;
 import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
 import org.springframework.http.server.reactive.ServerHttpResponse;
 import org.springframework.stereotype.Component;
 import org.springframework.web.server.ServerWebExchange;
 import reactor.core.publisher.Flux;
 import reactor.core.publisher.Mono;
+import shop.alien.entity.store.StoreUser;
+import shop.alien.gateway.mapper.StoreUserMapper;
+import shop.alien.util.common.JwtUtil;
 
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import java.nio.charset.StandardCharsets;
 import java.util.Arrays;
 import java.util.HashMap;
@@ -38,6 +47,12 @@ public class JwtTokenFilter implements GlobalFilter, Ordered {
     @Value("${jwt.skip-auth-urls}")
     private String[] skipAuthUrls;
 
+    @Autowired
+    private BaseRedisService baseRedisService;
+
+    @Autowired
+    private StoreUserMapper storeUserMapper;
+
     /**
      * 过滤器
      *
@@ -48,14 +63,24 @@ public class JwtTokenFilter implements GlobalFilter, Ordered {
     @Override
     public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
         String url = exchange.getRequest().getURI().getPath();
+        log.info("====================>path: " + url);
+//        if (url.startsWith("second/") || url.startsWith("store/")) {
+//            url = url.substring(url.indexOf("/"), url.length() + 1);
+//        }
         //跳过不需要验证的路径
         if (null != skipAuthUrls && Arrays.asList(skipAuthUrls).contains(url)) {
             return chain.filter(exchange);
         }
-        Map<String, Object> map = new HashMap<>();
-        int errorType = 0;
+        if (url.startsWith("/store/webjars") || url.startsWith("/second/webjars")) {
+            return chain.filter(exchange);
+        }
+
         //获取token
         String token = exchange.getRequest().getHeaders().getFirst("Authorization");
+        log.info("====================>token值: " + token);
+
+        JSONObject map = new JSONObject();
+        int errorType = 0;
         ServerHttpResponse resp = exchange.getResponse();
         if (StringUtils.isBlank(token)) {
             //没有token
@@ -65,7 +90,41 @@ public class JwtTokenFilter implements GlobalFilter, Ordered {
             try {
                 JwtUtil.checkToken(token);
                 Claims claims = JwtUtil.parseJWT(token);
-                JSONObject js = JSONObject.parseObject(claims.get("sub").toString());
+                JSONObject tokenData = JSONObject.parseObject(claims.get("sub").toString());
+                String deviceType = tokenData.getString("userType");
+                String phone = tokenData.getString("phone");
+                String redisKey;
+                //区分
+                if ("web".equals(deviceType)) {
+                    //管理端单设备登录
+//                redisKey = deviceType + "_" + tokenInfo.getClaim("userName").asString();
+                    //不限制
+                    return chain.filter(exchange);
+                } else {
+                    redisKey = deviceType + "_" + phone;
+                }
+                String redisVal = baseRedisService.getString(redisKey);
+                if (StringUtils.isEmpty(redisVal) || !token.equals(redisVal)) {
+                    //判断程序是否为用户禁用
+                    StoreUser storeUser = storeUserMapper.selectOne(new LambdaQueryWrapper<StoreUser>().eq(StoreUser::getPhone, phone));
+                    if (storeUser.getStatus() == 1) {
+                        map.put("msg", "你的账号已被禁用");
+                        //别问, 问就是约定俗成
+                        map.put("code", 777);
+                    } else {
+                        map.put("msg", "用户在别处登录");
+                        //别问, 问就是约定俗成
+                        map.put("code", 666);
+                    }
+
+                    map.put("success", false);
+
+                    exchange.getResponse().getHeaders().setContentType(MediaType.APPLICATION_JSON);
+                    return exchange.getResponse()
+                            .writeWith(Mono.just(exchange.getResponse()
+                                    .bufferFactory()
+                                    .wrap(map.toJSONString().getBytes())));
+                }
                 return chain.filter(exchange);
             } catch (ExpiredJwtException e) {
                 if (e.getMessage().contains("Allowed clock skew")) {

+ 1 - 1
alien-gateway/src/main/java/shop/alien/gateway/service/LifeUserService.java

@@ -10,8 +10,8 @@ import org.springframework.stereotype.Service;
 import shop.alien.entity.store.LifeUser;
 import shop.alien.entity.store.vo.LifeUserVo;
 import shop.alien.gateway.config.BaseRedisService;
-import shop.alien.gateway.config.JwtUtil;
 import shop.alien.gateway.mapper.LifeUserMapper;
+import shop.alien.util.common.JwtUtil;
 
 import java.util.Date;
 import java.util.HashMap;

+ 1 - 1
alien-gateway/src/main/java/shop/alien/gateway/service/impl/StoreUserServiceImpl.java

@@ -12,10 +12,10 @@ import shop.alien.entity.store.StoreInfo;
 import shop.alien.entity.store.StoreUser;
 import shop.alien.entity.store.vo.StoreUserVo;
 import shop.alien.gateway.config.BaseRedisService;
-import shop.alien.gateway.config.JwtUtil;
 import shop.alien.gateway.mapper.StoreInfoMapper;
 import shop.alien.gateway.mapper.StoreUserMapper;
 import shop.alien.gateway.service.StoreUserService;
+import shop.alien.util.common.JwtUtil;
 
 import java.util.HashMap;
 import java.util.Map;

+ 6 - 0
alien-second/pom.xml

@@ -253,6 +253,12 @@
             <version>1.0.0</version>
             <scope>compile</scope>
         </dependency>
+        <dependency>
+            <groupId>shop.alien</groupId>
+            <artifactId>alien-util</artifactId>
+            <version>1.0.0</version>
+            <scope>compile</scope>
+        </dependency>
 
     </dependencies>
 

+ 9 - 1
alien-second/src/main/java/shop/alien/second/controller/TestController.java

@@ -1,5 +1,6 @@
 package shop.alien.second.controller;
 
+import com.alibaba.fastjson.JSONObject;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiSort;
 import lombok.RequiredArgsConstructor;
@@ -8,6 +9,9 @@ import org.springframework.web.bind.annotation.CrossOrigin;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
+import shop.alien.util.common.JwtUtil;
+
+import javax.servlet.http.HttpServletRequest;
 
 @Slf4j
 @Api(tags = {"二期-阿里接口"})
@@ -19,7 +23,11 @@ import org.springframework.web.bind.annotation.RestController;
 public class TestController {
 
     @GetMapping("test")
-    public String test() {
+    public String test(HttpServletRequest request) {
+        JSONObject data = JwtUtil.getTokenInfo(request.getHeader("Authorization"));
+
+        System.out.println(222222);
+        System.out.println(data);
         return "hello world";
     }
 

+ 10 - 4
alien-util/pom.xml

@@ -27,10 +27,10 @@
             <artifactId>spring-boot-starter</artifactId>
         </dependency>
 
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-web</artifactId>
-        </dependency>
+<!--        <dependency>-->
+<!--            <groupId>org.springframework.boot</groupId>-->
+<!--            <artifactId>spring-boot-starter-web</artifactId>-->
+<!--        </dependency>-->
 
         <dependency>
             <groupId>org.projectlombok</groupId>
@@ -305,6 +305,12 @@
             <artifactId>spring-boot-starter-webflux</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>io.jsonwebtoken</groupId>
+            <artifactId>jjwt</artifactId>
+            <version>0.9.0</version>
+        </dependency>
+
     </dependencies>
 
     <build>

+ 10 - 1
alien-gateway/src/main/java/shop/alien/gateway/config/JwtUtil.java → alien-util/src/main/java/shop/alien/util/common/JwtUtil.java

@@ -1,5 +1,6 @@
-package shop.alien.gateway.config;
+package shop.alien.util.common;
 
+import com.alibaba.fastjson.JSONObject;
 import io.jsonwebtoken.Claims;
 import io.jsonwebtoken.JwtBuilder;
 import io.jsonwebtoken.Jwts;
@@ -106,4 +107,12 @@ public class JwtUtil {
 //        }
         return true;
     }
+
+    /**
+     * 获取token信息
+     */
+    public static JSONObject getTokenInfo(String token) {
+        Claims claims = JwtUtil.parseJWT(token);
+        return JSONObject.parseObject(claims.get("sub").toString());
+    }
 }