我的Web应用程序中有一些页面,这些页面只能由管理员访问。我写了过滤器,但是如果用户不是管理员,我不明白如何从过滤器返回HTTP错误代码(403)。

public class AdminFilter implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        String username = servletRequest.getParameter("username");
        String password = servletRequest.getParameter("password");

        UserDao userDaoImpl = new UserDaoImpl();
        if(userDaoImpl.findByUsername(username).getPassword().equals(password)) {
            filterChain.doFilter(servletRequest, servletResponse);
        } else {
            //respond with 403
        }
    }
}

我知道我可以重定向到自定义403页面,但是我想知道如何返回HTTP错误代码。

最佳答案

您需要先将servletResponse转换为HttpServletResponse:

HttpServletResponse response = (HttpServletResponse) servletResponse;

然后使用其sendError()方法:
response.sendError(HttpServletResponse.SC_FORBIDDEN);
SC_FORBIDDEN代表代码403。

顺便说一句,您没有重定向到403页面,只是以该状态进行响应。如果这样做,则servlet容器将为用户提供一个特殊的403页。您可以在web.xml中配置该页面:
<error-page>
    <error-code>403</error-code>
    <location>/error-403.htm</location>
</error-page>

当您设置403状态时,这将指示容器提供您的自定义页面/error-403.htm

如果要重定向,则可以使用response.sendRedirect()(发出302重定向)。

关于java - 如何从servlet过滤器返回HTTP错误代码?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45946692/

10-12 23:55