|
1 | 1 | package io.dongtai.iast.core.handler.hookpoint; |
2 | 2 |
|
3 | | -import io.dongtai.iast.core.AgentEngine; |
4 | 3 | import io.dongtai.iast.common.config.ConfigBuilder; |
5 | 4 | import io.dongtai.iast.common.config.ConfigKey; |
6 | 5 | import io.dongtai.iast.common.scope.Scope; |
7 | 6 | import io.dongtai.iast.common.scope.ScopeManager; |
| 7 | +import io.dongtai.iast.common.string.StringUtils; |
| 8 | +import io.dongtai.iast.core.AgentEngine; |
8 | 9 | import io.dongtai.iast.core.EngineManager; |
9 | 10 | import io.dongtai.iast.core.handler.bypass.BlackUrlBypass; |
10 | 11 | import io.dongtai.iast.core.handler.hookpoint.api.DubboApiGatherThread; |
|
17 | 18 | import io.dongtai.iast.core.handler.hookpoint.service.trace.DubboService; |
18 | 19 | import io.dongtai.iast.core.handler.hookpoint.service.trace.FeignService; |
19 | 20 | import io.dongtai.iast.core.handler.hookpoint.service.trace.HttpService; |
20 | | -import io.dongtai.iast.common.string.StringUtils; |
21 | 21 | import io.dongtai.iast.core.utils.matcher.ConfigMatcher; |
22 | 22 | import io.dongtai.log.DongTaiLog; |
23 | 23 | import io.dongtai.log.ErrorCode; |
|
31 | 31 | import java.util.Enumeration; |
32 | 32 | import java.util.HashMap; |
33 | 33 | import java.util.Map; |
| 34 | +import java.util.concurrent.ConcurrentHashMap; |
34 | 35 | import java.util.concurrent.atomic.AtomicInteger; |
35 | 36 |
|
36 | 37 | /** |
@@ -768,11 +769,18 @@ public boolean isSkipCollectFeign(Object instance) { |
768 | 769 | Object metadata = metadataField.get(instance); |
769 | 770 | Method templateMethod = metadata.getClass().getMethod("template"); |
770 | 771 | Object template = templateMethod.invoke(metadata); |
771 | | - |
772 | 772 | Method addHeaderMethod = template.getClass().getDeclaredMethod("header", String.class, String[].class); |
773 | 773 | addHeaderMethod.setAccessible(true); |
774 | | - addHeaderMethod.invoke(template, BlackUrlBypass.getHeaderKey(), new String[]{}); |
775 | | - addHeaderMethod.invoke(template, BlackUrlBypass.getHeaderKey(), new String[]{BlackUrlBypass.isBlackUrl().toString()}); |
| 774 | + ConcurrentHashMap<String, Collection<String>> headers = new ConcurrentHashMap<>(); |
| 775 | + synchronized (template){ |
| 776 | + /* |
| 777 | + * @todo 在高并发情况下,由于SynchronousMethodHandler复用的原因,会导致多线程下同时修改的问题 |
| 778 | + * 所以添加了对象锁,后续是否可以考虑更改为拦截器 |
| 779 | + */ |
| 780 | +// addHeaderMethod.invoke(template, BlackUrlBypass.getHeaderKey(), new String[]{}); |
| 781 | +// addHeaderMethod.invoke(template, BlackUrlBypass.getHeaderKey(), new String[]{BlackUrlBypass.isBlackUrl().toString()}); |
| 782 | + addHeaderMethod.invoke(template, BlackUrlBypass.getHeaderKey(), new String[]{"true"}); |
| 783 | + } |
776 | 784 | } catch (NoSuchFieldException | NoSuchMethodException | InvocationTargetException | IllegalAccessException e) { |
777 | 785 | DongTaiLog.error(ErrorCode.get("BYPASS_FAILED_FEIGN"), e); |
778 | 786 | } |
|
0 commit comments