集成图控制器
如果您的应用程序是基于 Web 的(或基于 Spring Boot 构建,并使用嵌入式 Web 容器),并且 Spring Integration HTTP 或 WebFlux 模块(分别参见 HTTP 支持 和 WebFlux 支持)存在于类路径中,您可以使用 IntegrationGraphController
将 IntegrationGraphServer
功能公开为 REST 服务。为此,@EnableIntegrationGraphController
和 @Configuration
类注解以及 <int-http:graph-controller/>
XML 元素在 HTTP 模块中可用。与 @EnableWebMvc
注解(或 XML 定义中的 <mvc:annotation-driven/>
)一起,此配置注册一个 IntegrationGraphController
@RestController
,其中其 @RequestMapping.path
可以配置在 @EnableIntegrationGraphController
注解或 <int-http:graph-controller/>
元素上。默认路径为 /integration
。
IntegrationGraphController
@RestController
提供以下服务
-
@GetMapping(name = "getGraph")
:检索自上次IntegrationGraphServer
刷新以来 Spring Integration 组件的状态。o.s.i.support.management.graph.Graph
作为 REST 服务的@ResponseBody
返回。 -
@GetMapping(path = "/refresh", name = "refreshGraph")
:刷新当前Graph
以获取实际运行时状态,并将其作为 REST 响应返回。无需为指标刷新图形。它们在检索图形时实时提供。如果应用程序上下文自上次检索图形以来已修改,则可以调用刷新。在这种情况下,图形将完全重建。
您可以使用 Spring Security 和 Spring MVC 项目提供的标准配置选项和组件为 IntegrationGraphController
设置安全性和跨域限制。以下示例实现了这些目标
<mvc:annotation-driven />
<mvc:cors>
<mvc:mapping path="/myIntegration/**"
allowed-origins="https://127.0.0.1:9090"
allowed-methods="GET" />
</mvc:cors>
<security:http>
<security:intercept-url pattern="/myIntegration/**" access="ROLE_ADMIN" />
</security:http>
<int-http:graph-controller path="/myIntegration" />
以下示例展示了如何使用 Java 配置完成相同操作
@Configuration
@EnableWebMvc // or @EnableWebFlux
@EnableWebSecurity // or @EnableWebFluxSecurity
@EnableIntegration
@EnableIntegrationGraphController(path = "/testIntegration", allowedOrigins="https://127.0.0.1:9090")
public class IntegrationConfiguration extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/testIntegration/**").hasRole("ADMIN")
// ...
.formLogin();
}
//...
}
请注意,为了方便起见,@EnableIntegrationGraphController
注解提供了一个 allowedOrigins
属性。这为 path
提供 GET
访问权限。为了更复杂的操作,您可以使用标准的 Spring MVC 机制配置 CORS 映射。