当前位置:  开发笔记 > 前端 > 正文

异常发生时的JSF响应代码

如何解决《异常发生时的JSF响应代码》经验,为你挑选了1个好方法。

在我的JSF应用程序中,我java.lang.SecurityException在用户未登录时抛出一个.在web.xml我重定向到login.jsf一个SecurityExceptionocurrs时.

现在我的问题是,当我查看服务器响应时,它是一个500 - Internal Server Error.我可以以某种方式抛出SecurityException并说它应该是一个401

谢谢



1> BalusC..:

当异常一直冒泡到servlet容器并作为未处理的异常到达时,它的每个定义始终是HTTP 500错误.你无法改变这一部分.

但是,您可以通过捕获和抑制某处的特定异常来控制它,然后显式调用HttpServletResponse#sendError(),传递所需的4xx/5xx状态代码.

在同步请求上,最合理的地方是servlet过滤器.

try {
    chain.doFilter(request, response);
}
catch (SecurityException e) {
    response.sendError(HttpServletResponse.SC_UNAUTHORIZED, e.getMessage());
}

注意:如果不是RuntimeException,请抓住ServletException并检查它getRootCause().另请参阅ao 服务器如何确定要使用哪种类型的web.xml错误页面的优先级?

但是,在异步(Ajax)请求中,您需要一个额外的自定义异常处理程序.另请参阅JSF ajax请求中的 ao 异常处理.当然,只有通过Ajax执行登录时才有意义.

或者,如果您已经在其中执行授权的servlet过滤器,那么只需执行sendError()而不是抛出SecurityException.如果您的授权过滤器看起来像在JSF中如何实现登录过滤器?,然后只需将底部的重定向替换为:

response.sendError(HttpServletResponse.SC_UNAUTHORIZED);

无论哪种方式,它将最终出现在与401 相关联的错误页面中.


    401
    /WEB-INF/errorpages/unauthorized.xhtml

推荐阅读
jerry613
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有