gpt4 book ai didi

tomcat - 为什么不显示来自 WEB-INF 的 403 错误页面?

转载 作者:行者123 更新时间:2023-11-28 23:32:36 25 4
gpt4 key购买 nike

在 web.xml 中,当我更改它时:

<error-page>
<error-code>403</error-code>
<location>/unauthorized.jsp</location>
</error-page>

为此:

<error-page>
<error-code>403</error-code>
<location>/WEB-INF/unauthorized.jsp</location>
</error-page>

页面不再显示。

两个文件都存在并且相同,其他错误类型的页面在 WEB-INF 下工作正常。

为什么会这样?

最佳答案

WEB-INF 中的文件受到保护,不能被客户端直接访问。它在 JavaEE specification 中定义.因此,当您将文件放在 WEB-INF 文件夹下时,它们将变得不可访问。因此,如果您需要直接访问它们,最好将这些(静态)文件放在 WEB-INF 目录之外。

注意:不过,您可以将应防止客户端直接访问的文件放在 WEB-INF 文件夹下。

例如:WEB-INF/jsp/protected.jsp

在下面详细说明您的评论。

您可以使用如下所示的 Controller 映射来映射 403 错误页面。在这里,您将看到一个常见的 exception.jsp 页面,其中根据位于 WEB-INF 文件夹内的错误代码提供不同的信息。

@Controller
public class ExceptionController {

/** Holds key for access denied exception. */
private static final String ACCESS_DENIED = "COMMON.EXCEPTION.403";

/** Holds return model attribute ACCESS_DENIED. */
private static final String ACCESS_DENIED_ATT = "accessDenied";

/** Holds return model PAGE ACCESS_DENIED. */
private static final String ACCESS_DENIED_HTM = "/accessDenied.htm";

/** Holds return page of exception. */
private static final String EXCEPTION = "exception";


/**
* Handle access denied exception and display proper message.
*
* @param model - ModelMap
* @return the name of the view.
*/
@RequestMapping(value = ACCESS_DENIED_HTM, method = RequestMethod.GET)
public String accessDenied(ModelMap model) {

String message = new ErrorMsgLoader().getErrorMessage(ACCESS_DENIED);
model.addAttribute(ACCESS_DENIED_ATT, message);
return EXCEPTION;
}


}

您在 web.xml 中的错误映射如下所示。

<error-page>
<error-code>403</error-code>
<location>/accessDenied.htm</location>
</error-page>

在上面的代码中,我使用了基于 Spring MVC 的处理程序映射到 View 。但是,如果您没有在应用程序中使用任何框架,则可以使用简单的 Servlet 映射执行相同的操作。

关于tomcat - 为什么不显示来自 WEB-INF 的 403 错误页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28391177/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com