java - JSF 2.0 web.xml 错误页面状态代码

标签 java tomcat jsf-2 web.xml

我当前正在修改使用 JSF 创建的应用程序。有关我正在做的事情的一些背景,请阅读下文。

背景

当 Acunetix 扫描操作 javax.faces.ViewState 的值时,它会在我的大多数页面中检测到名为“应用程序错误消息”的中等安全问题。 Acunetix 扫描将 View 状态更改为随机值或空字符串,导致我的应用程序引发异常。自定义错误页面使用 web.xml 文件中的以下配置捕获异常。

<error-page>
  <error-code>500</error-code>
  <location>/unhandled.xhtml</location>
</error-page>

<error-page>
  <exception-type>java.lang.Throwable</exception-type>
  <location>/unhandled.xhtml</location>
</error-page>

这按预期工作并显示自定义错误页面。但是,Acunetix 扫描将此视为漏洞,因为它在 header 中看到 500 状态代码以及错误消息“内部服务器错误”。

Acunetix 扫描摘录

/webapp/login.xhtml
Details
URL encoded Post input javax.faces.ViewState was set to
Error message found: Internal Server Error

问题:

是否可以将错误页面的状态代码更改为 200 而不是 500。如果没有,任何人都可以建议一种解决方法,让我能够操作页面状态代码。

注意:

请注意,我使用以下框架 Spring、JSF 2.0、Primefaces 3.4、Hibernate、Omnifaces(FacesEceptionFilter 和 FullAjaxExceptionHandlerFactory)、Tomcat 7 服务器。

感谢您的帮助...

最佳答案

我通过这样做解决了我的问题。在我的错误页面中,我刚刚添加了一个事件监听器,将状态代码强制设置为 200。

<?xml version="1.0" encoding="ISO-8859-1" ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml"
        xmlns:ui="http://java.sun.com/jsf/facelets"
        xmlns:h="http://java.sun.com/jsf/html"
        xmlns:f="http://java.sun.com/jsf/core"
        xmlns:p="http://primefaces.org/ui">

       <f:view contentType="text/html">
          <f:metadata>
             <f:event type="preRenderView" listener="#{errorController.forceStatusCode200()}"></f:event>
          </f:metadata>

          <h:body>
             <h1>ZZZZZZZZZ</h1>
          </h:body>
       </f:view>
    </html>

在我的托管Bean中

@component("errorController")
@Scope("view")
public class ErrorController
{
   public void forceStatusCode200()
   {
      FacesContext fc = FacesContext.getCurrentInstance();
      ExternalContext ec = fc.getExternalContext();
      HttpServletResponse hp = (HttpServletResponse) ec.getResponse();
      hp.setStatus(HttpServletResponse.SC_OK);
   }
}

通过执行此操作,当我使用 Fiddler 检查响应的状态代码时,我将不再看到错误代码 500。

我希望这对某人有帮助。另外,如果有人可以指出任何不良副作用,请随时发布。

感谢您的宝贵时间...

关于java - JSF 2.0 web.xml 错误页面状态代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20341269/

相关文章:

java - 使用 Speedment Streams 进行异步回调

java - 在 Tomcat 5 上部署 .war 时出现问题(空指针异常)

tomcat - JDeveloper - 用于部署 TomCat 的 WAR WebLogic 服务器

java - 无需 ?ln=xxx 从 JS 访问 JSF 资源库

java - 如何使用 Streams 将二维数组转换为二维列表?

java - journeyapp 的条形码 View 仅显示黑色 View

java - Tomcat5.5中的上下文信息

jsf-2 - 在 JSF 中添加人脸消息时,我的操作未执行?

java - JSF 2 : page not rerendered on AJAX request (@all and explicit IDs)

java - 如何在 Gradle "compile"任务中用自定义库替换 JDK 标准库?