Преглед на файлове

feature: 解析通用请求参数 userId, terminal & alipayUid

Walker преди 2 години
родител
ревизия
b748414048

+ 4 - 0
onemini-hospital-empty/src/main/java/com/ywt/alipaympapi/core/utils/ContextHelper.java

@@ -19,4 +19,8 @@ public final class ContextHelper {
 //        return 5;
         return WebAppContext.current().getUserId();
     }
+
+    public static String getAlipayUidWrapped() {
+        return WebAppContext.current().getAlipayUid();
+    }
 }

+ 4 - 2
onemini-hospital-empty/src/main/java/com/ywt/alipaympapi/web/configs/WapApiWebMvcConfigure.java → onemini-hospital-empty/src/main/java/com/ywt/alipaympapi/web/configs/WebMvcConfigure.java

@@ -7,11 +7,13 @@ import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
 import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
 
 @Configuration
-public class WapApiWebMvcConfigure extends WebMvcConfigurerAdapter {
+public class WebMvcConfigure extends WebMvcConfigurerAdapter {
 
     @Override
     public void addInterceptors(InterceptorRegistry registry) {
-        registry.addInterceptor((AccessBehaviorInterceptor) SpringContext.getBean(AccessBehaviorInterceptor.class)).addPathPatterns("/**");
+        registry.addInterceptor((AccessBehaviorInterceptor) SpringContext.getBean(AccessBehaviorInterceptor.class))
+                .addPathPatterns("/**")
+                .excludePathPatterns("/auth/bind");
         super.addInterceptors(registry);
     }
 }

+ 32 - 29
onemini-hospital-empty/src/main/java/com/ywt/alipaympapi/web/interceptors/AccessBehaviorInterceptor.java

@@ -12,11 +12,14 @@ import org.springframework.web.servlet.ModelAndView;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import java.util.Map;
 import java.util.UUID;
 
 /**
  * 自定义拦截器
- * 从网关获取鉴权信息
+ * 由于支付宝 ab 模式下,web-mini 透传不支持请求头转发,所以无法从网关获取 userId 等信息。
+ * 所以改成由前端在登录授权成功后,所有业务接口统一携带请求参数 userId, terminal & alipayUid 等,
+ * 拦截器从请求参数获取这些值并全局存储。
  */
 @Service("accessBehaviorInterceptor")
 public class AccessBehaviorInterceptor implements HandlerInterceptor {
@@ -25,38 +28,38 @@ public class AccessBehaviorInterceptor implements HandlerInterceptor {
     @Override
     public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) {
         try {
+            int userId = 0;
+            int terminal = 0;
+            String alipayUid = "";
+            Map<String, String[]> paramMap = httpServletRequest.getParameterMap();
+            if (paramMap != null) {
+                String[] sUid = paramMap.getOrDefault("userId", new String[]{"0"});
+                String[] sTerminal = paramMap.getOrDefault("terminal", new String[]{"0"});
+                String[] sAlipayUid = paramMap.getOrDefault("alipayUid", new String[]{""});
+                if (sUid != null && sUid.length > 0) {
+                    userId = Checker.parseInt(sUid[0]);
+                }
+                if (sTerminal != null && sTerminal.length > 0) {
+                    terminal = Checker.parseInt(sTerminal[0]);
+                }
+                if (sAlipayUid != null && sAlipayUid.length > 0) {
+                    alipayUid = Checker.getStringValue(sAlipayUid[0]);
+                }
+            }
+
+            if (userId <= 0) {
+                httpServletResponse.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
+                httpServletResponse.getWriter().write("please login");
+                return false;
+            }
+
             WebAppContext.current().init();
             WebAppContext.current().setRequestStartTime(System.currentTimeMillis());
             WebAppContext.current().setRequestID(UUID.randomUUID().toString());
-            WebAppContext.current().setIP(WebHelper.getIP(httpServletRequest));
-
-            String terminalStr = Checker.getStringValue(httpServletRequest.getHeader("pl-terminal"));
-            WebAppContext.current().setTerminal(Checker.parseInt(terminalStr));
+            WebAppContext.current().setTerminal(terminal);
+            WebAppContext.current().setUserId(userId);
+            WebAppContext.current().setAlipayUid(alipayUid);
 
-            String authData = httpServletRequest.getHeader("auth-data");
-            String authData1 = httpServletRequest.getHeader("Auth-Data");
-            String authData2 = httpServletRequest.getHeader("authdata");
-            if (Checker.isNone(authData) && !Checker.isNone(authData1)) {
-                authData = authData1;
-            }
-            if (!Checker.isNone(authData2)) {
-                authData = authData2;
-            }
-            logger.info("authData: " + authData);
-            if (!Checker.isNone(authData)) {
-                try {
-                    JsonNode jsonNode = JsonSerializer.readToNode(authData);
-                    if (jsonNode != null && jsonNode.get("userId") != null) {
-                        WebAppContext.current().setUserId(Checker.parseInt(jsonNode.get("userId").asText("0")));
-                    }
-                    if (jsonNode != null && jsonNode.get("alipayUid") != null) {
-                        WebAppContext.current().setAlipayUid(Checker.getStringValue(jsonNode.get("alipayUid").asText("")));
-                    }
-                } catch (Exception e) {
-                    logger.error("preHandle(authData): {}", e.getMessage(), e);
-                    e.printStackTrace();
-                }
-            }
         } catch (Exception e) {
             logger.error("preHandle(): {}", e.getMessage(), e);
         }