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
相关产品推荐
相关产品推荐

