首页 > 解决方案 > 使用过滤器/拦截器捕获相关的用户请求

问题描述

我正在捕获为我的网站请求的 URL。我需要查看从我的网站请求的所有页面。

为此,我创建了一个基本过滤器,并从那里开始记录页面请求。

现在,此过滤器捕获特定于页面的所有请求。

例如abc.com/page1abc.com/resources/myjs.js等。

我的问题是,对于每个页面请求,也会请求后续资源(js、css)。我只想捕获相关请求。

现在,我检查是否有类似/resources忽略此类请求的模式,但我正在寻找一种更干净的方法。

另外,拦截器在这里会更有用吗?我也看到了过滤器模式。但这些都没有用,因为我必须为我的过滤器创建模式。

标签: javaspringspring-bootweb-applications

解决方案


如果您想捕获从您的网站访问的 url,您可以配置 spring boot 以通过以下方式生成访问日志,直到您不想要更多高级信息:

server.tomcat.accesslog.directory=/logs/  #absolute directory path for log files\
server.tomcat.accesslog.enabled=false #Enable access log.  
server.tomcat.accesslog.pattern=any_pattern # log string format pattern for access logs.

要根据任何请求模式执行任何操作,您可以继续使用过滤器。我正在通过以下方式使用过滤器来满足此类要求:

    public class CustomFilter extends OncePerRequestFilter{

    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, 
                                    FilterChain filterChain) throws ServletException, IOException {
        String url = request.getRequestURI();
        if (url.startsWith("/resources/")) {
            //your business logic
        }
        filterChain.doFilter(request,response);
    }
}

推荐阅读