我有以下代码
@WebFilter(urlPatterns = "/path/to/directory/*")
public class PageFilter extends MyBaseFilter {
}
如果我执行“http://localhost/path/to/directory”,它会按预期工作,但如果我执行“http://localhost/PATH/to/directory”或任何其他组合,则过滤器不起作用。看起来是否区分大小写。有没有办法使此大小写不敏感,以便它匹配 url 的任何排列?
有没有办法让这种大小写不敏感,以便它匹配网址的任何排列?
没有。
但是您可以添加另一个过滤器,当 URI 包含大写字符时,该过滤器会向小写 URI 发送 301(永久)重定向。
例如
@WebFilter("/*")
public class LowerCasedUriFilter extends HttpFilter {
@Override
public void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException {
var uri = request.getRequestURI();
var lowerCasedUri = uri.toLowerCase();
if (uri.equals(lowerCasedUri)) {
chain.doFilter(request, response);
}
else {
response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
response.setHeader("Location", lowerCasedUri);
}
}
}
确保此过滤器已在您的之前注册。