瀏覽代碼

Fix the bug that context was not released when blocked in Spring Web adapter (#1353)

master
cdfive GitHub 4 年之前
父節點
當前提交
43b5e65ab3
沒有發現已知的金鑰在資料庫的簽署中 GPG 金鑰 ID: 4AEE18F83AFDEB23
共有 2 個檔案被更改,包括 11 行新增4 行删除
  1. +5
    -1
      sentinel-adapter/sentinel-spring-webmvc-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/spring/webmvc/AbstractSentinelInterceptor.java
  2. +6
    -3
      sentinel-adapter/sentinel-spring-webmvc-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/spring/webmvc/SentinelSpringMvcIntegrationTest.java

+ 5
- 1
sentinel-adapter/sentinel-spring-webmvc-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/spring/webmvc/AbstractSentinelInterceptor.java 查看文件

@@ -67,7 +67,11 @@ public abstract class AbstractSentinelInterceptor implements HandlerInterceptor
}
return true;
} catch (BlockException e) {
handleBlockException(request, response, e);
try {
handleBlockException(request, response, e);
} finally {
ContextUtil.exit();
}
return false;
}
}


+ 6
- 3
sentinel-adapter/sentinel-spring-webmvc-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/spring/webmvc/SentinelSpringMvcIntegrationTest.java 查看文件

@@ -71,18 +71,21 @@ public class SentinelSpringMvcIntegrationTest {
final String headerName = "S-User";
configureRulesFor(springMvcPathVariableUrl, 0, limitOrigin);

// This will be passed since the caller is different: userB
this.mvc.perform(get("/foo/1").accept(MediaType.TEXT_PLAIN).header(headerName, "userB"))
.andExpect(status().isOk())
.andExpect(content().string("foo 1"));

// This will be blocked and reponse json.
// This will be blocked since the caller is same: userA
this.mvc.perform(
get("/foo/2").accept(MediaType.APPLICATION_JSON).header(headerName, limitOrigin))
.andExpect(status().isOk())
.andExpect(content().json(ResultWrapper.blocked().toJsonString()));

// This will be passed since the caller is different: ""
this.mvc.perform(get("/foo/3").accept(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andExpect(content().string(ResultWrapper.blocked().toJsonString()));
.andExpect(content().string("foo 3"));

FlowRuleManager.loadRules(null);
}
@@ -115,7 +118,7 @@ public class SentinelSpringMvcIntegrationTest {
assertEquals(i + 1, cn.passQps(), 0.01);
}

// This will be blocked and reponse json.
// This will be blocked and response json.
this.mvc.perform(get(url))
.andExpect(status().isOk())
.andExpect(content().string(ResultWrapper.blocked().toJsonString()));


Loading…
取消
儲存