【问题标题】:Hide/customize status 500 error message/status description inside response header (Glassfish)隐藏/自定义响应标头内的状态 500 错误消息/状态描述 (Glassfish)
【发布时间】:2014-01-28 07:23:45
【问题描述】:

我正在开发在 GlassFish (v3.1.2.2) 下运行的 jsf 2 Web 应用程序。这个应用程序有自定义错误 500 页面,在 web.xml 中定义。我的问题是是否有可能在状态 500 响应的响应标头内禁用/隐藏/自定义错误消息/状态描述?目前我得到这样的东西:

HTTP/1.1 500 /view.xhtml @11,30 [error message same as in root exception] <- I want to hide this one (only message/status description)
X-Powered-By: JSF/2.0
Content-Type: text/html;charset=UTF-8
Transfer-Encoding: chunked
Date: Thu, 09 Jan 2014 15:33:44 GMT
Connection: close

谢谢!

【问题讨论】:

    标签: java jsf-2 glassfish


    【解决方案1】:

    在 web.xml 上定义一个过滤器来拦截错误并生成你喜欢的响应。

    https://stackoverflow.com/tags/servlet-filters/info

    【讨论】:

    • 不幸的是,这不起作用。错误页面的响应标头是在过滤器调用之后设置的,并且没有在错误页面请求上调用过滤器...所以我可以在doFilter 方法中捕获 servlet 异常并定义我的标头,但之后会被覆盖:(
    • 你是在调用chain.doFilter之后设置标题吗?
    • 是的,只有当ServletException被抛出而chain.doFilter()方法时
    • 也许那是问题所在。
    • 我认为问题在于 GlassFish 在过滤器调用之后会处理所有错误页面。错误页面本身也不会出现在过滤器中。
    【解决方案2】:

    我找到了解决办法。这不好,但它有效。看 JSF 2.0 web.xml error page status code.

    我没有更改状态代码,而是保留状态代码并仅更改状态消息:

    ...
    FacesContext fc = FacesContext.getCurrentInstance();
    ExternalContext ec = fc.getExternalContext();
    HttpServletResponse hp = (HttpServletResponse) ec.getResponse();
    hp.setStatus(hp.getStatus(), "my new message");
    ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-24
      • 2018-12-28
      • 1970-01-01
      • 2014-10-27
      • 1970-01-01
      • 2020-08-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多