为什么WEB-INF的403错误页面没有显示?

时间:2015-02-08 06:15:18

标签: tomcat

在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。

为什么会这样?

1 个答案:

答案 0 :(得分:0)

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

注意:您可以放置​​应该受到保护的文件,以免客户端直接访问WEB-INF文件夹。

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

详细说明您的评论。

您可以使用如下控制器映射映射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的处理程序映射到视图。但是,如果您没有在应用程序中使用任何框架,则可以使用简单的Servlet映射执行相同的操作。