Przeglądaj źródła

临时增加API接口鉴权日志输出,排查401问题

luoshi 1 rok temu
rodzic
commit
75f9a92c87

+ 24 - 13
stmms-web/src/main/java/cn/com/qmth/stmms/api/interceptor/ApiInterceptor.java

@@ -1,15 +1,5 @@
 package cn.com.qmth.stmms.api.interceptor;
 
-import java.util.Date;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.commons.lang.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.method.HandlerMethod;
-import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
-
 import cn.com.qmth.stmms.api.exception.ApiException;
 import cn.com.qmth.stmms.biz.school.model.School;
 import cn.com.qmth.stmms.biz.school.service.SchoolService;
@@ -25,6 +15,17 @@ import cn.com.qmth.stmms.common.signature.SignatureInfo;
 import cn.com.qmth.stmms.common.signature.SignatureType;
 import cn.com.qmth.stmms.common.utils.EncryptUtils;
 import cn.com.qmth.stmms.common.utils.RequestUtils;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.apache.commons.lang.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.method.HandlerMethod;
+import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Date;
 
 /**
  * API接口访问拦截器
@@ -33,6 +34,8 @@ import cn.com.qmth.stmms.common.utils.RequestUtils;
  */
 public class ApiInterceptor extends HandlerInterceptorAdapter {
 
+    protected static final Logger log = LoggerFactory.getLogger(ApiInterceptor.class);
+
     @Autowired
     private AuthorizationService authorizationService;
 
@@ -46,7 +49,8 @@ public class ApiInterceptor extends HandlerInterceptorAdapter {
     private SessionService sessionService;
 
     @Override
-    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
+            throws Exception {
         HandlerMethod method = (HandlerMethod) handler;
         try {
             return validate(request, response, method.getMethodAnnotation(RoleRequire.class));
@@ -79,8 +83,15 @@ public class ApiInterceptor extends HandlerInterceptorAdapter {
                     return buildApiUser(request, response, school);
                 } else if (info.getType() == SignatureType.TOKEN) {
                     User user = userService.findByLoginName(info.getInvoker());
-                    if (user == null || user.getScanTokenInvalidTime() == null
-                            || new Date().after(user.getScanTokenInvalidTime()) || !info.validate(user.getScanToken())) {
+                    if (user == null || user.getScanTokenInvalidTime() == null || new Date()
+                            .after(user.getScanTokenInvalidTime()) || !info.validate(user.getScanToken())) {
+                        try {
+                            ObjectMapper mapper = new ObjectMapper();
+                            log.warn("api token signature invalud, signature={}, user={}",
+                                    mapper.writeValueAsString(info),
+                                    user != null ? mapper.writeValueAsString(user) : "{}");
+                        } catch (Exception ignored) {
+                        }
                         throw ApiException.SIGNATURE_INVALID;
                     }
                     if (!user.isEnable()) {