当前位置: 首页 > 面试题库 >

在过滤器中重定向时停止进一步处理

贺功
2023-03-14
问题内容

我有URLRewirteFilter,它检查请求的域是否以www开头。并重定向到无www网址。当要重定向请求时,如何停止进一步的处理(调用JSF应用程序,调用servlet等)?到目前为止,我有这个:

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    HttpServletRequest req = (HttpServletRequest) request;
    String sn = req.getServerName().toLowerCase();
    if (sn.startsWith("www.")) {
        String url = "http://" + getDefaultDomain() + req.getContextPath() + req.getRequestURI();
        HttpServletResponse resp = (HttpServletResponse) response;
        resp.reset();
        resp.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
        resp.setHeader("Location", url);
    }
    chain.doFilter(request, response);
}

问题答案:

只需return在末尾添加一条语句即可if

if (sn.startsWith("www.")) {
    String url = "http://" + getDefaultDomain() + req.getContextPath() + req.getRequestURI();
    HttpServletResponse resp = (HttpServletResponse) response;
    resp.reset();
    resp.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
    resp.setHeader("Location", url);
    return;
}
chain.doFilter(request, response);

或添加一个 else

if (sn.startsWith("www.")) {
    String url = "http://" + getDefaultDomain() + req.getContextPath() + req.getRequestURI();
    HttpServletResponse resp = (HttpServletResponse) response;
    resp.reset();
    resp.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
    resp.setHeader("Location", url);
} else {
    chain.doFilter(request, response);
}


 类似资料:
  • WordPress的contact form 7插件有一个扩展,我可以根据不同的条件隐藏某些表单字段(比如“其他”字段,在选择选项设置为“其他”之前一直隐藏)。不幸的是,如果其中一个字段被标记为必填字段,则会弹出一个错误,说明该字段是必填字段,即使用户从未看到该字段! 不幸的是,联系人表单7设置为不可逆字段无效:一旦字段无效,就无法重新验证,表单提交失败。由于CF7是如此可扩展,我需要一个解决方案

  • 问题内容: 我正在尝试找到一种方法,可将请求从过滤器重定向到登录页面,但我不知道如何从servlet重定向。我搜索了,但发现的是方法。我在过滤器的响应对象上找不到此方法。是什么原因 我该如何解决? 问题答案: 在Filter中,响应是而不是。因此将强制转换为。 如果使用上下文路径: 也不要忘记在最后打电话。

  • 我有一个servlet过滤器类。在doFilter函数中,我希望在chain.doFilter(请求,响应)调用之后重定向到一个自定义URL。

  • 我在Elasticsearch 7.10中创建了一个索引,如下所示: 如您所见,我配置了一个名为my_analyzer的自定义分析器,该分析器应用了令牌过滤器。基于文档,我希望这个过滤器在索引时从文档的所有类型属性中删除英语stopwords。 事实上,如果我向http://localhost:30200/my_index/_analyze使用此请求主体: 我得到一个响应,表明令牌、、和已从提供的

  • 更新:我试过那些设置,但它们也不起作用。

  • 我是android编程的新手,所以这些问题可能是愚蠢的。我读了一些书,但不能完全得到答案。 我有一个广播接收器,从一个服务注册了一些意图- 由于我移除了“setforeground”调用以保持我的服务运行(因为我不想要状态栏图标,我想知道我是否懒惰使用这种方法),我的服务现在将定期关闭,通常在短时间后再次启动(但有时我看到它是5分钟)。