我的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/