Filter的生命周期
和Servlet的生命周期一致,实例化->初始化->执行服务方法->销毁
不同在于:Filter是在服务器启动时就已经完成实例化和初始化,由服务器管理。
登陆过滤器的实现
public class AuthorizationFilter implements Filter {
@Override
public void destroy() {
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
/**
* 检查用户是否登录,如果用户没有登录,那么跳转到登录页面
* 如果用户登录,那么进入下一个Filter
* 难点:要将login.jsp和login.do(servlet)放过去
*/
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req=(HttpServletRequest)request;
HttpServletResponse resp=(HttpServletResponse)response;
Object obj=req.getSession().getAttribute("username");
if(obj==null){//session中没有用户信息
String path=req.getRequestURI().substring(req.getRequestURI().lastIndexOf("/"+1));
//将login.jsp和login.do(servlet)放过去
if(!("login.jsp".equals(path)||"login.do".equals(path))){
resp.sendRedirect("login.jsp");
return;
}
}
chain.doFilter(request, response);
}
}