【问题标题】:Customize error page 404自定义错误页面 404
【发布时间】:2016-04-25 21:48:11
【问题描述】:

我正在使用 tomcat 运行一个 rest api 服务器。 我正在尝试拨打电话:

localhost:8080/.script.alert%28.XSS.%29.%2Fscript./users

我收到了这样的回复:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL /�script�alert(�XSS�)�/script�/users was not found on this server.</p>
</body></html>

我想自定义此消息,使 url 不会出现在消息中。 我不确定是谁在生成响应,是 apache 吗?雄猫?球衣?

我已经尝试将错误映射添加到 web.xml,但没有成功。

【问题讨论】:

    标签: apache tomcat http-status-code-404 jersey-2.0


    【解决方案1】:

    这是Tomcat生成的错误页面。您可以禁用它并只发送状态代码而不是错误页面。为此,您需要将以下属性设置为true

    ServerProperties.RESPONSE_SET_STATUS_OVER_SEND_ERROR

    只要响应状态为4xx5xx,就可以在容器特定的响应实现上选择sendErrorsetStatus。例如。在 servlet 容器上 Jersey 可以调用 HttpServletResponse.setStatus(...)HttpServletResponse.sendError(...)

    调用sendError(...) 方法通常会重置实体、响应标头并提供指定状态码的错误页面(例如servlet error-page 配置)。但是,如果您想对响应进行后处理(例如通过 servlet 过滤器),唯一的方法是在容器响应对象上调用 setStatus(...)

    如果属性值为 true,则使用方法 Response.setStatus(...) 而不是默认的 Response.sendError(...)

    属性值的类型是boolean。默认值为false

    您可以通过调用property(key, value) 在您的ResourceConfig 子类构造函数中设置它。或者,如果您使用的是 web.xml,只需将其设置为 init-param。在 web.xml 中,您将需要使用 String 版本

    jersey.config.server.response.setStatusOverSendError

    【讨论】:

      【解决方案2】:

      该错误实际上是在 apache 级别上,而不是在我认为的 tomcat 级别上。 为了覆盖apache错误: How to Override Apache error pages

      【讨论】:

        猜你喜欢
        • 2013-09-16
        • 2015-03-18
        • 1970-01-01
        • 2011-07-25
        • 2013-05-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-01
        相关资源
        最近更新 更多