spring-boot - 如何从 Keycloak Integration Spring Boot 向 APM 发送自定义请求或响应标头
问题描述
我正在开发 springboot 项目,我们正在使用 openId keycloak 进行身份验证。我也对多租户概念感到困惑。我想将自定义标头作为请求或响应发送,并且应该在 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 在多次解析部署期间被初始化,因此添加了响应。
需要建议
谢谢。
解决方案
看来这可能是问题更可能与您的应用程序上下文弹簧和过滤器有关。
既然是春天,你可以试试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() {
}
}
推荐阅读
- sql - SQL-每周报告 7 天(周日至周六)
- python - 使用 Pandas 在 Python 中解析时间戳不会返回 datetime64
- mysql - mysql - 更新,多表连接,从案例表达式中设置值
- android - 具有不同通知的Android多个警报
- reactjs - 是否可以在 Redux Store 中实现 setTimeout?
- android-layout - 如何实现以下布局?
- sql-server - SQL Server 查询 - 返回包含除数字和其他特定特殊字符以外的字符的列中的值
- python - LDAP - 仅允许组中的用户登录,
- php - 如何修复解析错误:Unexpected Token ;?
- css - 如何将按钮与输入上方和下方的两个标签对齐