Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
异常发生时的JSF响应代码_Jsf_Jsf 2 - Fatal编程技术网

异常发生时的JSF响应代码

异常发生时的JSF响应代码,jsf,jsf-2,Jsf,Jsf 2,在我的JSF应用程序中,当用户未登录时,我抛出一个java.lang.SecurityException。在web.xml中,当出现SecurityExceptionocurrs时,我重定向到login.jsf 现在我的问题是,当我查看服务器响应时,它是一个500-内部服务器错误。我是否可以抛出SecurityException并说它应该是401 谢谢当异常一直冒泡到servlet容器并作为未处理的异常到达时,根据定义它总是HTTP 500错误。你不能改变那部分 但是,您可以通过在某处捕获并抑制

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

现在我的问题是,当我查看服务器响应时,它是一个
500-内部服务器错误
。我是否可以抛出
SecurityException
并说它应该是
401


谢谢

当异常一直冒泡到servlet容器并作为未处理的异常到达时,根据定义它总是HTTP 500错误。你不能改变那部分

但是,您可以通过在某处捕获并抑制特定异常,然后显式调用,传递所需的4xx/5xx状态代码来控制该异常

对于同步请求,最明智的做法是使用一个

注意:如果它不是
运行时异常
,则捕获
ServletException
并检查其
getRootCause()
。另见a.o

但是,在异步(Ajax)请求中,您确实需要一个额外的自定义异常处理程序。另见a.o。当然,这只有在通过Ajax执行登录时才相关

或者,如果您已经有了一个servlet过滤器来执行授权,那么只需执行
senderro()
,而不是抛出
SecurityException
。如果您的授权筛选器与中的相同,则只需将底部的重定向替换为:

response.sendError(HttpServletResponse.SC_UNAUTHORIZED);
无论哪种方式,它都会出现在与401的
相关联的错误页面中

<error-page>
    <error-code>401</error-code>
    <location>/WEB-INF/errorpages/unauthorized.xhtml</location>
</error-page>

401
/WEB-INF/errorpages/unauthorized.xhtml
<error-page>
    <error-code>401</error-code>
    <location>/WEB-INF/errorpages/unauthorized.xhtml</location>
</error-page>