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

4

我有一个实现了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);
}

我希望发生的是,当403响应代码出现时,web.xml中定义的<error-page>会被触发。
<error-page>
    <error-code>403</error-code>
    <location>/forbidden.xhtml</location>
</error-page>

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

1个回答

11

我的错误是使用response.setStatus(403),实际需要的是

response.sendError(403);
return;

这对我来说非常有效,我正在使用自定义错误消息将响应发送回用户界面。捕获(Exception e){ log.error(String.format(“令牌验证中发生异常:%s”,e.getMessage())); ((HttpServletResponse) response).sendError(401,AuthzError.INVALIDAUTHTOKEN.getDescription()); 返回; } - Sindhu
如何更改响应中的时间戳格式? - user2302639

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接