(这是关于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>
标签生成的请求吗?
观察和其他信息:
答案 0 :(得分:0)
看起来我自己想出来了。
这实际上是Firefox行为的结果。 从Chrome调用同一服务器时,过滤器会查看所有请求。 显然,Firefox中有一些适用于脚本的缓存机制。