Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

spring-boot内嵌tomcat场景下,SpringMVC restcontroller接口内调用cse接口如何传递header(上下文)信息

Abierto
#4,632 2 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
30/100
Tipo de issue
Nueva funcionalidad
Claridad
Bastante claro
Estado de actividad
Estancado
Stack tecnológico
java, spring-boot

Línea de trabajo

Empieza siguiendo el límite entre Spring MVC DispatchServlet y RestServlet; después inspecciona cómo RestTemplate gestiona la llamada cse://provider/test/health y cómo se rellena InvocationContext. Reproduce el flujo con el encabezado x-cse-context de curl contra actuator/health; estará hecho cuando el mismo contexto esté disponible en el handler de salud CSE descendente.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

场景

集成spring-boot-actuator组件,业务通过curl命令调用actuator/health接口检测服务状态,业务自定义AbstractHealthIndicator里面调用cse的health接口,代码如下:

@Component
public class HealthChecker extends AbstractHealthIndicator {

    @Override
    protected void doHealthCheck(Health.Builder builder) throws Exception {
        RestTemplate restTemplate = RestTemplateBuilder.create();
        String result = restTemplate.getForObject("cse://provider/test/health", String.class);
        if ("UP".equals(result)) {
            builder.up().withDetail("cseState", "UP");
        } else {
            builder.down().withDetail("cseState", "DOWN");
        }
    }
}
image

curl命令:携带x-cse-context header信息

curl  -ki -H 'x-cse-context: {"x-biz-tenantId": "1002"}' http://localhost:9093/provider/actuator/health

期望

在provider/test/health 这个cse接口内可以通过handler在invocationcontext中获取到'x-cse-context: {"x-biz-tenantId": "1002"}' 信息。

现状

由于actuator组件的endpoint接口是由Spring MVC的DispatchServlet处理的,而cse接口是由RestServlet处理的,这个header信息无法带过来,但是是处于同一条调用链中。
其实,任何restcontroller接口调用cse接口都无法传递header信息, 我们希望在前台设置header上下文,调用rest接口的时候,将这个上下文传递到cse接口中

@RestController("/")
public class HelloController {

    @GetMapping("/hello")
    public String hello(){
        RestTemplate restTemplate = RestTemplateBuilder.create();
        return  restTemplate.getForObject("cse://provider/test/health", String.class);
    }
}

image

请问有什么方案?

Lenguaje dominante
Java
Estrellas
1.9k
Forks
813
Merge medio
8 d 23 h
PR fusionados (30 d)
1

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de apache/servicecomb-java-chassis

Todos los issues de apache/servicecomb-java-chassis

Issues similares

Más issues de Java

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.