如何从Keycloak Integration Spring Boot向APM发送自定义请求或响应头

问题描述 投票:1回答:1

我正在从事springboot项目,我们正在使用openId密钥斗篷进行身份验证。我也很喜欢Multitenancy概念。我想发送自定义标头作为请求或响应,并且应该在APM中将其作为元数据捕获。我当前的方法如下:


public class PreAuthFilter extends KeycloakPreAuthActionsFilter {

@Override
  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
((HttpServletResponse) response).addHeader("X-Realm",realm);
super.doFilter(request, response, chain);
}

但是使用上面的代码,我在APM中得到多个响应元数据

http.response.headers.X-Realm.0

http.response.headers.X-Realm.1

http.response.headers.X-Realm.2

http.response.headers.X-Realm.3

我的期望是APM元数据中的单一领域

http.response.headers.X-Realm = "value"

我认为SimpleHttpFacade在解决部署多次过程中被初始化,因此增加了响应。

需要建议

感谢

spring-boot keycloak multi-tenant apm
1个回答
0
投票

看来这可能是问题更可能与您的应用程序上下文弹簧和过滤器有关。

由于是春天,你可以尝试OncePerRequestFilter吗?

import org.springframework.web.filter.OncePerRequestFilter;

@Named
public class ApmFilter extends OncePerRequestFilter {

    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
            throws ServletException, IOException {
        // do apm things

        filterChain.doFilter(request, response);
    }

    @Override
    public void destroy() {
    }

}
© www.soinside.com 2019 - 2024. All rights reserved.