当前位置: 首页 > 知识库问答 >
问题:

用于非 2xx 代码的服务器响应过滤器

栾瑞
2023-03-14

我想给来自我的服务器的http响应添加一些头。我需要添加标题,无论代码(2xx,4xx,5xx)返回应用程序。我尝试用< code>@WebFilter批注实现< code > javax . servlet . filter ,用< code>@Provider批注实现< code > javax . ws . RS . container . container response filter ,但是只有当应用程序返回200 http状态代码时才调用方法< code>doFilter和< code>filter。非2xx响应可以使用过滤器吗?

我用的是wildly 8 . 2 . 0做应用服务器,但是我觉得不重要

编辑

我想我应该提供更多关于我的问题的信息。我的应用程序是Resteasy实现的REST服务。我还使用Wildlfy安全子系统为授权配置了安全策略。我需要REST服务的响应总是包含来自前端的每个请求的CORS头,即使客户端没有通过授权检查。但当响应代码为401时,即使我使用DispatcherType,也不会调用过滤器方法。错误,建议@Steve C。所以,我不返回任何状态代码,所有代码都返回服务器(比如@ACV)。也许这就是原因,过滤器不适合我的情况。

编辑II

我在这个问题上找到了部分答案。可以通过在Wildfly独立配置下移子系统来向所有非错误(非5xx)响应添加标头.xml

共有3个答案

柯奕
2023-03-14

我认为您应该尝试通过web.xml中的错误页声明来捕获错误:

<!--
The error-page element contains a mapping between an error code
or exception type to the path of a resource in the web application
-->
<error-page>

    <!--
    The error-code contains an HTTP error code, ex: 404
    -->
    <error-code></error-code>

    <!--
    The location element contains the location of the resource in the web
    application relative to the root of the web application. The value of
    the location must have a leading `/'.
    -->
    <location>/my.jsp</location>
</error-page>

…然后编码我的。jsp来处理出现错误时的响应(我总是用jsp进行异常处理;我不知道servletURI是否也能正常工作)。

唯一的缺点是您必须为要处理的每个HTTP错误显式包含一个节点。

看见http://docs.oracle.com/cd/E14571_01/web.1111/e13712/web_xml.htm#WBAPP537

西门安歌
2023-03-14

尝试实现一个标准的servlet过滤器。顺便说一下。404来自服务器,而不是您的应用程序。也是500。您可以自己返回这些代码,在这种情况下,过滤器应该可以工作。此外,另一种解决方案是在任何请求之前设置标头。但这并不能将您从404问题中解救出来。如何设置servlet过滤器

鲁华皓
2023-03-14

您需要在@WebFilter声明中包含DispatcherType:

@WebFilter(urlPatterns={...}, dispatcherTypes={ERROR, REQUEST, ...})
public class ...
 类似资料:
  • java.io.ioException:服务器返回HTTP响应代码:406 for url:https://aa09616289afe6a25ea1f7f6fbf12073:shppa_f5fd47a653d49d886436578c54187@mfaisal1521.myshopify.com/admin/api/2020-04/products.json at sun.net.www.prot

  • 问题内容: 我正在尝试从URL获取InputStream。可以从Firefox打开URL。它返回一个json,并且我已经安装了一个插件以在Firefox中查看json,因此我可以在其中查看它。 所以我尝试通过以下方式从Java获取它: 但是它在urlConnection.getInputStream()中抛出IOException。 我也尝试过: 但是没有运气。 任何信息都是可观的。提前致谢。 问

  • 它以GAE标准运行。更改日志权限后更新日志: 权限已更改:triage@appspot.gserviceaccount.com 应用程序引擎默认服务帐户 编辑器日志编写器所有者 有趣的是,到上周为止,它一直运行得很好。 当我试图访问该网站时,显示503个错误。2018-07-11 11:16:26.296 CDT GET 302 0 B 1 ms Chrome 67/144.188.128.2-[

  • 问题内容: 我正在用Java面对这个问题。我想从URL获取一些HTML信息。该代码已经运行了很长时间,但是突然,它停止了工作。 当我使用浏览器访问此URL时,它毫无问题地打开。 代码: 例外: 怎么了?主人阻止了我吗? 问题答案: HTTP状态代码500通常表示Web服务器代码已崩溃。您需要预先确定状态代码,如果有错误,请阅读。它可能即包含有关问题的信息。 如果主机阻止了您,您宁愿获得4nn状态码

  • 我可以访问网站kissmanga.com但我不能通过程序访问它。我修正了错误403,我之前得到的,但现在我得到错误503。 好的,这段代码可以解决一个小问题。我没有得到完整的html,但只有2/3。