|
@@ -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;
|
|
|
+ }
|
|
|
+}
|