Servlet响应过滤器用于非2xx http代码

时间:2015-08-04 10:06:13

标签: java java-ee servlets wildfly

我想从我的服务器向http响应中添加一些标头。无论返回应用程序的代码(2xx,4xx,5xx)如何,我都需要添加标题。我尝试使用javax.servlet.Filter注释实现@WebFilter,使用javax.ws.rs.container.ContainerResponseFilter注释实现@Provider,但仅在应用返回200 http时调用方法doFilterfilter状态代码。是否可以使用过滤器进行非2xx响应?

我使用Wildfly 8.2.0作为应用服务器,但我认为它并不重要

修改

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

编辑II

我在this question找到了部分答案。通过在Wildfly standalone.xml配置下位子系统,可以为所有非错误(非5xx)响应添加标头

3 个答案:

答案 0 :(得分:3)

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

@WebFilter(urlPatterns={...}, dispatcherTypes={ERROR, REQUEST, ...})
public class ...

答案 1 :(得分:0)

尝试实现标准的servlet过滤器。顺便说说。 404来自服务器,而不是来自您的应用程序。另外500.您可以自己返回这些代码,在这种情况下,过滤器应该可以工作。另外,另一种解决方案是在任何请求之前设置标头。但这不会让你免于404问题。 How to set servlet filters

答案 2 :(得分:0)

我认为您应该尝试通过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>

...然后编写my.jsp代码以在发生错误时处理响应(我总是使用JSP进行异常处理;我不知道servlet URI是否也能正常工作)。

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

请参阅http://docs.oracle.com/cd/E14571_01/web.1111/e13712/web_xml.htm#WBAPP537