Servlet请求阻止

时间:2011-03-02 22:59:22

标签: java http servlets servlet-filters

我有一个过滤器,它扫描通过我的应用程序的所有请求。我想阻止请求,如果它请求特定的URL。我能够检查这一点,如果条件匹配,我不是在做chain.doFilter,但请求仍会移动到黑页。如何阻止此请求进一步停留在当前页面中 - 这意味着用户不应该看到他点击的屏幕有任何更改?

2 个答案:

答案 0 :(得分:2)

HTTP status code 204可能有效,但不保证可以与所有浏览器一起使用:

  

204无内容

     

服务器已完成请求   但不需要返回   entity-body,可能想要返回   更新的元信息。响应   可能包括新的或更新的   形式的元信息   entity-headers,如果存在的话   应该与之相关联   要求的变体。

     

如果客户端是用户代理,那么   不应该改变它的文档视图   从导致请求的那个   被发送。这种反应主要是   旨在允许对行动的输入   发生而不会导致改变   用户代理的活动文档视图,   虽然有任何新的或更新的   元信息应该适用于   当前在用户中的文档   代理人的积极观点。

     

204响应不得包含a   消息体,因而永远   由第一个空行终止   在标题字段之后。

(强调我的)

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

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

答案 1 :(得分:1)

你做不到。浏览器已经提出了请求并且它已经失控了。你可能能够破解一些你返回一点javascript的东西,这些javascript默默地“点击”浏览器的“后退”按钮,但毫无疑问它有各种令人讨厌的问题。

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