2011-03-02 157 views
2

我有一个筛选器,它可以扫描我的应用程序中的所有请求。我想要阻止请求,如果它请求一个特定的网址。我可以检查这个,如果条件匹配,我不会做chain.doFilter,但仍然会将请求移到黑色页面。如何阻止此请求继续进行并停留在当前页面 - 意味着用户不应该看到他点击的屏幕有任何改变?Servlet请求阻止

回答

1

你不能。浏览器已经提出请求,并且已经无法使用。你可能会破解一些JavaScript,它会默默地“点击”浏览器的“返回”按钮,但毫无疑问,它具有各种令人讨厌的问题。

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

2

的HTTP status code 204可能会奏效,但它不能保证所有浏览器的工作:

204无内容

服务器已完成要求 但并不需要返回 实体并且可能想要返回 已更新的元信息。响应 可能包含新的或更新的 元信息,其形式为 实体标题,如果存在 应该与 请求的变体相关联。

如果客户是用户代理,它 不应改变从它的文件视图 ,其引起 请求被发送。这种反应主要是 旨在允许输入用于操作至 发生而不引起的改变 用户代理的活动文档视图, 虽然任何新的或更新 元信息应该在当前应用于 该文档的用户 剂的活性视图。

204响应必须不包括 消息体,且因此是总是通过 头字段之后的第一空行 终止。

(重点煤矿)

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

  1. 有这个servlet返回307(临时重定向)回使用HTTP引用领域的前一页。这种方法可能会导致缓存和代理问题。
  2. 使用ajax从您的servlet加载内容。你将不得不用直接链接来替代启动Ajax调用的JavaScript调用来替换页面的一部分。以这种方式加载内容时,浏览器中的URL不会更改,这可能会或可能不合意。许多网站使用混合,包括StackOverflow。任何应该是“permalink-able”的东西都会通过常规链接导航,但每个页面的部分内容都是通过ajax懒洋洋地提取的。

最后,告诉用户链接已关闭,这有什么问题?让servlet返回403(禁止)。