@WebFilter似乎忽略了包含的Javascript文件

时间:2018-05-01 10:58:25

标签: servlets java-ee servlet-filters

(这是关于Java EE / Servlets WebFilters)

我目前正在尝试编写一个WebFilter,它可以捕获对Web应用程序的每个请求。

但是,我注意到WebFilter没有在<script>标记内看到请求。

正在提供的HTML页面包含样式表......

<link rel="stylesheet" href="/webjars/bootstrap/4.1.0/css/bootstrap.min.css">

...还有三个Javascript-includes ......

<script src="/webjars/jquery/3.0.0/jquery.min.js"></script>
<script src="/webjars/popper.js/1.14.1/popper.min.js"></script>
<script src="/webjars/bootstrap/4.1.0/js/bootstrap.min.js"></script>

然而,@ WebFilter只能看到对根页面(GET /)和样式表的请求,如下面过滤器创建的日志所示。

  

12:04:51,909 INFO Init
  12:04:51,909 INFO doFilter
  12:04:51,909 INFO ServletRequest:HttpServletRequestImpl [GET /]
  12:04:51,959 INFO doFilter
  12:04:51,959 INFO ServletRequest:HttpServletRequestImpl [GET /webjars/bootstrap/4.1.0/css/bootstrap.min.css]

WebFilter的实现如下所示:

@WebFilter(filterName = "webjarFilter", urlPatterns = "/*")
public class WebJarFilter implements Filter {
    private Logger logger = LoggerFactory.getLogger(getClass());

    public void init(FilterConfig filterConfig) throws ServletException {
        logger.info("Init");
    }

    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        logger.info("doFilter");
        logger.info("ServletRequest: {}", servletRequest);
        filterChain.doFilter(servletRequest, servletResponse);
    }

    public void destroy() {
        logger.info("destroy");
    }
}

web.xml文件包含以下映射:

<filter-mapping>
    <filter-name>webjarFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

我现在的问题是: 有人可以告诉我为什么过滤器没有捕获应该从<script>标签生成的请求吗?

观察和其他信息:

  • 我正在使用Java EE 7测试Wildfly 12
  • 直接打开Javascript-Files将触发过滤器
  • 当引用具有错误路径的Javascript文件时,过滤器会看到请求。过滤器不会看到包含正确路径的Javascript文件的内容。

1 个答案:

答案 0 :(得分:0)

看起来我自己想出来了。

这实际上是Firefox行为的结果。 从Chrome调用同一服务器时,过滤器会查看所有请求。 显然,Firefox中有一些适用于脚本的缓存机制。