Servlet URL 模式区分大小写

问题描述 投票:0回答:1

我有以下代码

@WebFilter(urlPatterns = "/path/to/directory/*")
public class PageFilter extends MyBaseFilter {

}

如果我执行“http://localhost/path/to/directory”,它会按预期工作,但如果我执行“http://localhost/PATH/to/directory”或任何其他组合,则过滤器不起作用。看起来是否区分大小写。有没有办法使此大小写不敏感,以便它匹配 url 的任何排列?

servlets case-sensitive url-pattern
1个回答
0
投票

有没有办法让这种大小写不敏感,以便它匹配网址的任何排列?

没有。

但是您可以添加另一个过滤器,当 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);
        }
    }
}

确保此过滤器已在您的之前注册。

© www.soinside.com 2019 - 2024. All rights reserved.