原理:除了登陆页面,其他页面的虚拟路径后都用统一的符号标识。比如用/login
。而filter就拦截所有虚拟路径以/user开头的页面。filter验证该页面请求对应的session里的有没有登陆成功后应有的内容。如果没有,重定向到登陆页面。如果有,证明已经登陆过,执行filterChain的doFilter方法。
filter代码:
public class Myfilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
//先转为HttpServletRequest,HttpServletResponse
HttpServletRequest request=(HttpServletRequest)servletRequest;
HttpServletResponse response=(HttpServletResponse)servletResponse;
//如果前面已经登陆过,在session里赋值了,该页面可以执行下一个servlet,如果没有先重定向到登陆页面!
if (request.getSession().getAttribute("loginUser")==null){
response.sendRedirect(request.getContextPath()+"/login.jsp");
}else {
filterChain.doFilter(request,response);
}
}
@Override
public void destroy() {
}
}
登陆成功时往session里放内容的代码:
最后,别忘了为filter配置web.xml文件。或者直接用注解标注@WebFilter("/user“)
好了,简单的用filter验证就完成了。