Browse Source

fix: 优化是否需要获取用户信息过滤

huangzqa 4 năm trước cách đây
mục cha
commit
86582b0e10

+ 43 - 0
src/main/java/com/dragonsoft/dcuc/approvegateway/filter/BimUserInfoPreFilter.java

@@ -6,9 +6,12 @@ import com.dragonsoft.approve.model.TokenInfo;
 import com.dragonsoft.dcuc.approvegateway.Constants;
 import com.dragonsoft.dcuc.approvegateway.business.BimBusiness;
 import com.dragonsoft.dcuc.approvegateway.pojo.BimUserInfoItemRespVO;
+import com.dragonsoft.dcuc.approvegateway.properties.DcucApproveProperties;
 import com.dragonsoft.duceap.base.entity.security.BaseSecurityUser;
 import com.dragonsoft.duceap.base.exception.ApplicationException;
 import com.dragonsoft.duceap.base.utils.UserContextUtils;
+import com.dragonsoft.duceap.commons.util.UrlMatcher;
+import com.dragonsoft.duceap.commons.util.json.JsonUtils;
 import com.dragonsoft.duceap.security.jwt.JwtTokenUtils;
 import com.dragonsoft.duceap.web.SecurityProperties;
 import com.netflix.zuul.ZuulFilter;
@@ -17,6 +20,7 @@ import com.netflix.zuul.exception.ZuulException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.web.ServerProperties;
 import org.springframework.stereotype.Component;
 
 import javax.servlet.http.HttpServletRequest;
@@ -32,6 +36,12 @@ public class BimUserInfoPreFilter extends ZuulFilter {
     @Autowired
     private SecurityProperties securityProperties;
 
+    @Autowired
+    private ServerProperties serverProperties;
+
+    @Autowired
+    private DcucApproveProperties dcucApproveProperties;
+
     @Autowired
     private BimBusiness bimBusiness;
 
@@ -54,6 +64,11 @@ public class BimUserInfoPreFilter extends ZuulFilter {
     @Override
     public Object run() throws ZuulException {
         RequestContext ctx = RequestContext.getCurrentContext();
+        HttpServletRequest request = ctx.getRequest();
+        if (isNeedUserInfo(request)) {
+            return null;
+        }
+
         BaseSecurityUser currentUser = UserContextUtils.getCurrentUser();
         logger.info("====登录用户信息:{}====", JSONObject.toJSONString(currentUser));
         if (currentUser != null) {
@@ -89,4 +104,32 @@ public class BimUserInfoPreFilter extends ZuulFilter {
 
         return baseSecurityUser;
     }
+
+    /**
+     * 是否需要用户信息
+     *
+     * @param request 请求
+     * @return 是否需要
+     */
+    private boolean isNeedUserInfo(HttpServletRequest request) {
+        String contextPath = serverProperties.getServlet().getContextPath();
+        String requestUri = request.getRequestURI();
+        logger.debug("Security filter origin uri:{}", requestUri);
+
+        // 去除上下文
+        requestUri = requestUri.substring(contextPath.length());
+
+        logger.debug("Security filter not context uri:{}", requestUri);
+
+        String huaweiLoginFilterUrl = dcucApproveProperties.getHuaweiLoginFilterUrl();
+        String[] splitUrls = huaweiLoginFilterUrl.split(",");
+
+        logger.debug("splitUrls:{} .", JsonUtils.toJSONString(splitUrls));
+
+        if (UrlMatcher.matches(requestUri, splitUrls)) {
+            logger.debug("URI:{} Not need get user info.", requestUri);
+            return false;
+        }
+        return true;
+    }
 }

+ 5 - 0
src/main/java/com/dragonsoft/dcuc/approvegateway/properties/DcucApproveProperties.java

@@ -42,4 +42,9 @@ public class DcucApproveProperties {
      */
     private Integer bimTokenExpireSecond = 9 * 60;
 
+    /**
+     * 华为登陆过滤路径
+     */
+    private String huaweiLoginFilterUrl = "";
+
 }

+ 2 - 1
src/main/resources/application-base.yml

@@ -72,4 +72,5 @@ dcuc:
   approve:
     bim-identity-url: https://127.0.0.1:8443/bim-server
     bim-login-id: app1
-    bim-secret-key: app1@123
+    bim-secret-key: app1@123
+    huawei-login-filter-url: /v2/api-docs,/api/v1/process-types,api/v1/process-type,api/v1/apply,services,hessian,commons,install.action,.xml,/install,/widgets-src/,/authorizationPage.html,/importAuthorizationFile.html,/license/LicenseManagerServlet,/authorizationFile/