Servlets 在Servlet过滤器中设置响应代码

Servlets 在Servlet过滤器中设置响应代码,servlets,jakarta-ee,filter,Servlets,Jakarta Ee,Filter,我有一个类实现了javax.servlet.Filter,它对会话中设置的令牌对象进行身份验证,如果令牌无效,我希望返回403禁止响应。所以我有点像 @Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throw ServletException { HttpServletRequest request = (HttpServletRequest) req;

我有一个类实现了
javax.servlet.Filter
,它对会话中设置的令牌对象进行身份验证,如果令牌无效,我希望返回403禁止响应。所以我有点像

@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throw ServletException {
    HttpServletRequest request = (HttpServletRequest) req;
    HttpServletResponse response = (HttpServletResponse) res;
    ...
    ...
    // Something has gone wrong with auth set the response code and
    // continue with the chain
    response.setStatus(403);
    chain.doFilter(request, response);
}
然后,我希望web.xml中定义的
触发403响应代码

<error-page>
    <error-code>403</error-code>
    <location>/forbidden.xhtml</location>
</error-page>

403
/禁止使用.xhtml

我可以看到浏览器开发工具的网络选项卡正确地显示了403类型的响应。但是浏览器没有像我预期的那样重定向到错误页面,我在这里做错了什么?

我的错误是做了
响应。setStatus(403)
需要发生的是

response.sendError(403);
return;

这对我来说非常有效,我使用自定义错误消息将响应发送回UI。catch(异常e){log.error(String.format(“令牌验证中发生异常:%s”,e.getMessage());((HttpServletResponse)响应)。sendError(401,AuthzError.INVALIDAUTHTOKEN.getDescription());return;}