diff --git a/sentinel-adapter/sentinel-spring-webmvc-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/spring/webmvc/AbstractSentinelInterceptor.java b/sentinel-adapter/sentinel-spring-webmvc-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/spring/webmvc/AbstractSentinelInterceptor.java index eab24e14..b065c54c 100644 --- a/sentinel-adapter/sentinel-spring-webmvc-adapter/src/main/java/com/alibaba/csp/sentinel/adapter/spring/webmvc/AbstractSentinelInterceptor.java +++ b/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; } } diff --git a/sentinel-adapter/sentinel-spring-webmvc-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/spring/webmvc/SentinelSpringMvcIntegrationTest.java b/sentinel-adapter/sentinel-spring-webmvc-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/spring/webmvc/SentinelSpringMvcIntegrationTest.java index f6a4b30f..f1ddb937 100644 --- a/sentinel-adapter/sentinel-spring-webmvc-adapter/src/test/java/com/alibaba/csp/sentinel/adapter/spring/webmvc/SentinelSpringMvcIntegrationTest.java +++ b/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()));