You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tomcat因用户会话过滤器返回403错误的Kubernetes环境排查求助

Kubernetes集群中Strands金融软件Tomcat Pod返回403状态排查

问题背景

Kubernetes集群运行金融软件Strands,前端访问/bfm-web/config/get.action时,请求被Tomcat Pod拒绝,返回403状态。日志显示请求由UserSessionFilter拦截,提示Request not allowed. Just return a 403 status。检查web.xml未发现相关配置,怀疑是否与Kubernetes授权设置有关?另外,日志显示自定义过滤器HttpHeaderUserSessionFilter将[user.header.name]设为HTTP_STRANDS_USER,这类过滤器的配置位置在哪里?后端PostgreSQL数据库运行正常。

相关日志信息

UserSessionFilter拦截日志

2022-10-31T10:30:46,133 INFO [UserSessionFilter.java:153] : URI :/bfm-web/config/get.action
2022-10-31T10:30:46,133 INFO [UserSessionFilter.java:154] : Remote Host :10.240.0.103
2022-10-31T10:30:46,133 INFO [UserSessionFilter.java:155] : Remote Port :41898
2022-10-31T10:30:54,295 INFO [UserSessionFilter.java:152] : Request not allowed. Just return a 403 status
2022-10-31T10:30:54,296 INFO [UserSessionFilter.java:153] : URI :/bfm-web/config/get.action
2022-10-31T10:30:54,296 INFO [UserSessionFilter.java:154] : Remote Host :10.240.0.229
2022-10-31T10:30:54,296 INFO [UserSessionFilter.java:155] : Remote Port :57206

HttpHeaderUserSessionFilter配置日志

2022-10-27T11:16:20,751 INFO  [{omitted_due_to_sec_reasons}HttpHeaderUserSessionFilter.java:71] : The header name [user.header.name] has been set to HTTP_STRANDS_USER

Tomcat访问日志

10.240.0.103 - - [28/Oct/2022:14:02:33 +0000] "GET /bfm-web/config/get.action HTTP/1.1" 403 707
10.240.0.103 - - [31/Oct/2022:10:12:01 +0000] "GET /bfm-web/config/get.action HTTP/1.1" 403 743
10.240.0.103 - - [31/Oct/2022:10:24:31 +0000] "GET /bfm-web/config/get.action HTTP/1.1" 403 743
10.240.0.103 - - [31/Oct/2022:10:24:36 +0000] "GET /bfm-web/config/get.action HTTP/1.1" 403 743
10.240.0.103 - - [31/Oct/2022:10:30:46 +0000] "GET /bfm-web/config/get.action HTTP/1.1" 403 743
10.240.0.229 - - [31/Oct/2022:10:30:54 +0000] "GET /bfm-web/config/get.action HTTP/1.1" 403 743

Tomcat上下文日志

31-Oct-2022 10:12:01.856 INFO [http-nio-8080-exec-10] org.apache.catalina.core.ApplicationContext.log Request not allowed. Just return a 403 status. URI :: /bfm-web/config/get.action
31-Oct-2022 10:24:31.966 INFO [http-nio-8080-exec-2] org.apache.catalina.core.ApplicationContext.log Request not allowed. Just return a 403 status. URI :: /bfm-web/config/get.action
31-Oct-2022 10:24:36.951 INFO [http-nio-8080-exec-3] org.apache.catalina.core.ApplicationContext.log Request not allowed. Just return a 403 status. URI :: /bfm-web/config/get.action
31-Oct-2022 10:30:46.133 INFO [http-nio-8080-exec-5] org.apache.catalina.core.ApplicationContext.log Request not allowed. Just return a 403 status. URI :: /bfm-web/config/get.action
31-Oct-2022 10:30:54.297 INFO [http-nio-8080-exec-6] org.apache.catalina.core.ApplicationContext.log Request not allowed. Just return a 403 status. URI :: /bfm-web/config/get.action

问题解答

1. 是否与Kubernetes授权设置有关?

从日志来看,403是Tomcat内部UserSessionFilter直接返回的,和Kubernetes授权无关。Kubernetes层面的拦截(比如Ingress RBAC、NetworkPolicy、ServiceAccount权限问题)会在Ingress控制器或kube-apiserver日志中留下记录,且返回的403会带有Kubernetes相关标识,当前所有日志均指向应用内部过滤器逻辑,可排除Kubernetes授权的直接影响。

2. 自定义过滤器HttpHeaderUserSessionFilter的位置在哪里?

这类自定义Java过滤器的配置位置通常有以下几种:

  • 应用注解配置:若应用使用Java注解(如@WebFilter)注册过滤器,无需在web.xml显式配置,可查看应用源码或编译后的class文件,查找带该注解的类。
  • 应用扩展XML配置:部分金融应用会有自定义配置文件(如filter-config.xml、spring-context.xml,若基于Spring框架),需检查应用WEB-INF目录下的其他XML文件。
  • 应用WAR包内的class文件:过滤器class文件通常在WAR包的WEB-INF/classes目录下,日志中省略的部分就是包名(比如com.strands.filter.HttpHeaderUserSessionFilter对应WEB-INF/classes/com/strands/filter/路径)。
  • Tomcat全局配置:若为Tomcat全局过滤器,会配置在Tomcat安装目录的conf/web.xml或conf/context.xml中,但这类过滤器作用于所有应用,当前日志指向应用特定过滤器,可能性较低。

额外排查建议

  • 检查请求是否携带HTTP_STRANDS_USER头:HttpHeaderUserSessionFilter将其设为用户标识,UserSessionFilter可能需要这个头验证会话,未携带则会返回403。
  • 查看UserSessionFilter逻辑:若能获取源码或反编译class文件,查看第152行附近的判断条件,明确拦截原因(如会话过期、IP白名单限制、权限不足等)。

内容的提问来源于stack exchange,提问作者t3ranops

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 02:05:20