Java Servlet请求阻塞

Java Servlet请求阻塞,java,http,servlets,servlet-filters,Java,Http,Servlets,Servlet Filters,我有一个过滤器,可以扫描通过我的应用程序的所有请求。我想阻止一个请求,如果它请求一个特定的url。我可以检查这一点,如果条件匹配,我不会执行chain.doFilter,但请求仍会移动到一个黑色页面。我如何才能阻止此请求继续并停留在当前页面上?这意味着用户不应该看到他单击的屏幕有任何更改?您不能。浏览器已经发出了请求,现在已经无法控制了。您可能能够破解一些东西,返回一点javascript,悄悄地“点击”浏览器的“后退”按钮,但毫无疑问,这会带来各种各样的麻烦 但一旦浏览器发送了请求,当前页面就

我有一个过滤器,可以扫描通过我的应用程序的所有请求。我想阻止一个请求,如果它请求一个特定的url。我可以检查这一点,如果条件匹配,我不会执行chain.doFilter,但请求仍会移动到一个黑色页面。我如何才能阻止此请求继续并停留在当前页面上?这意味着用户不应该看到他单击的屏幕有任何更改?

您不能。浏览器已经发出了请求,现在已经无法控制了。您可能能够破解一些东西,返回一点javascript,悄悄地“点击”浏览器的“后退”按钮,但毫无疑问,这会带来各种各样的麻烦

但一旦浏览器发送了请求,当前页面就“死了”。

HTTP可能会工作,但不能保证所有浏览器都能工作:

204无内容

服务器已完成请求 但不需要返回 实体体,并且可能要返回 更新元信息。反应 可能包括新的或更新的 元信息以 实体头,如果存在 应与 请求的变体

如果客户端是用户代理,则 不应更改其文档视图 从导致请求 被派去。这一反应主要是 旨在允许对要执行的操作进行输入 在不引起变更的情况下进行 用户代理的活动文档视图, 尽管有任何新的或更新的 元信息应应用于 用户当前所在的文档 代理的活动视图

204响应不得包括 消息体,因此始终是 由第一个空行终止 在标题字段之后

(强调矿山)

或者,您可以尝试以下策略之一:

  • 让servlet使用HTTP Referer字段返回307(临时重定向)到上一页。这种方法可能会导致缓存和代理出现问题
  • 使用ajax从servlet加载内容。您必须用JavaScript调用替换直接链接,JavaScript调用启动ajax调用以替换页面的一部分。以这种方式加载内容时,浏览器中的URL不会更改,这可能是可取的,也可能是不可取的。许多站点使用混合,包括StackOverflow。任何应该是“永久链接”的内容都可以通过常规链接导航到,但每个页面的部分都是通过ajax惰性地获取的
  • 最后,告诉用户链接是禁止访问的,有什么不对?让servlet返回403(禁止)