如何通过URL base拦截请求?

axc*_*dnt 5 java servlets request servlet-filters

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

Bal*_*usC 8

刚刚实施javax.servlet.Filter.

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

<url-pattern>/*</url-pattern>
Run Code Online (Sandbox Code Playgroud)

或者当你已经使用Servlet 3.0时

@WebFilter(urlPatterns = { "/*" })
Run Code Online (Sandbox Code Playgroud)

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

HttpServletRequest httpRequest = (HttpServletRequest) request;
String uri = httpRequest.getRequestURI();
// ...
Run Code Online (Sandbox Code Playgroud)

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

boolean matches = uri.startsWith("/something");
Run Code Online (Sandbox Code Playgroud)

您可以使用if/elseJava语言提供的关键字来控制代码中的流.

if (matches) {
    // It matches.
} else {
    // It doesn't match.
}
Run Code Online (Sandbox Code Playgroud)

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

HttpServletResponse httpResponse = (HttpServletResponse) response;
httpResponse.sendRedirect(newURL);
Run Code Online (Sandbox Code Playgroud)

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

chain.doFilter(request, response);
Run Code Online (Sandbox Code Playgroud)

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

也可以看看: