【问题标题】:How to intercept a request by URL base?如何通过 URL 基础拦截请求?
【发布时间】:2011-07-15 19:06:00
【问题描述】:

我有一个问题要解决,需要一些帮助。假设我有一个来自我的域的 URL,例如:http://mydomain.com/any_page.xhtml。我想在点击链接时拦截用户请求,理论上指向我的域并需要它拦截并将其重定向到根据我的标准确定的新 URL。 我正在使用简单的 Servlet。在我的调查中,我发现过滤器可能对我有帮助。 有人知道如何为这个提案创造一些东西吗?

【问题讨论】:

    标签: java servlets request servlet-filters


    【解决方案1】:

    也许看看UrlRewriterFilter?

    【讨论】:

      【解决方案2】:

      只需实现javax.servlet.Filter。

      如果您将其映射到 /* 的 URL 模式上,它将在 每个 请求上执行。

      <url-pattern>/*</url-pattern>
      

      或者当您已经在使用 Servlet 3.0 时

      @WebFilter(urlPatterns = { "/*" })
      

      可以通过filter的doFilter()方法中的HttpServletRequest#getRequestURI()获取请求URI,如下:

      HttpServletRequest httpRequest = (HttpServletRequest) request;
      String uri = httpRequest.getRequestURI();
      // ...
      

      您可以使用java.lang.String 类提供的任何方法来比较/操作它。

      boolean matches = uri.startsWith("/something");
      

      您可以使用Java语言提供的if/else关键字来控制代码中的流程。

      if (matches) {
          // It matches.
      } else {
          // It doesn't match.
      }
      

      您可以使用HttpServletResponse#sendRedirect() 发送重定向。

      HttpServletResponse httpResponse = (HttpServletResponse) response;
      httpResponse.sendRedirect(newURL);
      

      您可以使用FilterChain#doFilter() 让请求继续。

      chain.doFilter(request, response);
      

      算一下。当然,您也可以使用第 3 方,例如 Tuckey 的 URL 重写过滤器,即 Apache HTTPD 的 mod_rewrite 的 Java 变体。

      另见:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-06-25
        • 1970-01-01
        • 1970-01-01
        • 2013-01-31
        • 2011-01-20
        • 1970-01-01
        • 2020-09-20
        • 1970-01-01
        相关资源
        最近更新 更多