zhangyu 1 týždeň pred
rodič
commit
7b94da2661

+ 46 - 0
src/main/java/com/futu/goose/filter/AuthInterceptor.java

@@ -0,0 +1,46 @@
+package com.futu.goose.filter;
+
+import com.futu.goose.utils.RedisClient;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.web.servlet.HandlerInterceptor;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+@Component
+public class AuthInterceptor implements HandlerInterceptor {
+    @Autowired
+    private RedisClient redisClient;
+    @Override
+    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws IOException {
+        // 放行登录、注册等不需要认证的接口
+        String uri = request.getRequestURI();
+        if (uri.contains("/login") || uri.contains("/regist") || uri.contains("/phonelogin")||  uri.contains("/send4Order")) {
+            return true;
+        }
+
+        // 检查请求头中的 token
+        String token = request.getHeader("token");
+
+        if (token == null || token.isEmpty()) {
+            // 返回未登录状态码和信息
+            response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
+            response.setContentType("application/json;charset=UTF-8");
+            response.getWriter().write("{\"code\": 401, \"message\": \"未登录\"}");
+            return false;
+        }
+        // 从 Redis 中获取存储的 token
+        String storedToken = (String) redisClient.get("token");
+        System.out.println(storedToken);
+        System.out.println(token);
+        if (storedToken == null || !storedToken.equals(token)) {
+            response.setStatus(HttpServletResponse.SC_FORBIDDEN);
+            response.setContentType("application/json;charset=UTF-8");
+            response.getWriter().write("{\"code\": 403, \"message\": \"无效的 token\"}");
+            return false;
+        }
+        // token 存在,继续执行后续操作
+        return true;
+    }
+}

+ 20 - 0
src/main/java/com/futu/goose/filter/WebConfig.java

@@ -0,0 +1,20 @@
+package com.futu.goose.filter;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+@Configuration
+public class WebConfig implements WebMvcConfigurer {
+
+    @Autowired
+    private AuthInterceptor authInterceptor;
+
+    @Override
+    public void addInterceptors(InterceptorRegistry registry) {
+        registry.addInterceptor(authInterceptor)
+                .addPathPatterns("/**")  // 拦截所有请求
+                .excludePathPatterns("/login", "/regist", "/phonelogin","/send4Order");  // 放行登录、注册接口
+    }
+}

+ 1 - 1
src/main/java/com/futu/goose/user/pojo/TUser.java

@@ -16,7 +16,7 @@ public class TUser implements Serializable {
     /**
      * 用户ID,主键
      */
-    @TableId(type = IdType.AUTO)
+    @TableId
     private Long id;
 
     /**

+ 3 - 0
src/main/java/com/futu/goose/user/service/impl/TUserServiceImpl.java

@@ -47,6 +47,7 @@ public class TUserServiceImpl extends ServiceImpl<TUserMapper, TUser>
             return ResponseResult.errorResult(202,"密码错误");
         }
         String token = AppJwtUtil.getToken(selectOne.getId().longValue());
+        redisClient.set("token",  token);
         HashMap<String, String> map = new HashMap<>();
         map.put("token",token);
         map.put("name",selectOne.getUsername());
@@ -126,6 +127,7 @@ public class TUserServiceImpl extends ServiceImpl<TUserMapper, TUser>
             redisClient.expire("uid", 60*60);
             Long id = user.getId();
             String token = AppJwtUtil.getToken(id);
+            redisClient.set("token",  token);
             HashMap<String, String> map = new HashMap<>();
             map.put("token",token);
             return ResponseResult.okResult(map);
@@ -133,6 +135,7 @@ public class TUserServiceImpl extends ServiceImpl<TUserMapper, TUser>
         redisClient.set("uid",  user1.getId());
         redisClient.expire("uid", 60*60);
         String token = AppJwtUtil.getToken(user1.getId().longValue());
+        redisClient.set("token",  token);
         HashMap<String, String> map = new HashMap<>();
         map.put("token",token);
         map.put("name",user1.getUsername());