WebSphere 9.0.x添加Shiro过滤器后为何出现FileNotFoundException日志?
问题原因分析
WebSphere默认静态资源处理逻辑:未集成Shiro时,WebSphere的Web容器会优先处理静态资源请求。当请求的静态资源不存在时,容器内部会直接返回404响应,不会将
FileNotFoundException抛出到日志系统,所以看不到相关错误堆栈。ShiroFilter的拦截优先级与资源查找行为:你配置的ShiroFilter(通常映射为
/*)会先于WebSphere的静态资源处理器接收所有请求。Shiro在处理请求过程中,会通过ServletContext.getResource()或类似方法尝试定位资源,当资源不存在时,这个方法会抛出FileNotFoundException。而Shiro本身没有捕获并静默处理这个异常,而是将其传递给了WebSphere容器。WebSphere的日志触发机制:WebSphere容器接收到这个未被上层过滤器处理的异常后,会按照默认日志策略将完整的异常堆栈输出到
SystemOut.log中,这就是你看到的错误日志。如果你的ShiroFilter只拦截动态请求(比如*.jsp、*.do),而非所有请求,就不会触发这个问题。
内容的提问来源于stack exchange,提问作者Carson
相关产品推荐
相关产品推荐

