如何通过URL base拦截请求?

时间:2011-03-15 13:13:45

标签: java servlets request servlet-filters

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

2 个答案:

答案 0 :(得分:8)

只需实施javax.servlet.Filter

如果您将其映射到/*的网址格式,则会在每个请求上执行。

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

或当您已经使用Servlet 3.0时

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

您可以在过滤器的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);

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

另见:

答案 1 :(得分:1)

或许看看UrlRewriterFilter