Art*_*mal 3 java servlet-filters
我的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
}
}
}
Run Code Online (Sandbox Code Playgroud)
我知道我可以重定向到我的自定义403页面,但我想知道如何返回HTTP错误代码.
Rom*_*kiy 14
你需要转换servletResponse到HttpServletResponse第一:
HttpServletResponse response = (HttpServletResponse) servletResponse;
Run Code Online (Sandbox Code Playgroud)
然后使用它的sendError()方法:
response.sendError(HttpServletResponse.SC_FORBIDDEN);
Run Code Online (Sandbox Code Playgroud)
SC_FORBIDDEN 代表代码403.
顺便说一下,你没有重定向到403页面,你只需回复那个状态.如果这样做,servlet容器将向用户提供特殊的403页面.您可以在以下位置配置该页面web.xml:
<error-page>
<error-code>403</error-code>
<location>/error-403.htm</location>
</error-page>
Run Code Online (Sandbox Code Playgroud)
这会指示容器/error-403.htm在设置403状态时为您的自定义页面提供服务.
如果您想要重定向,可以使用response.sendRedirect()(它发出302重定向).