servlet写webapp时,用filter拦截实现登陆验证

原理:除了登陆页面,其他页面的虚拟路径后都用统一的符号标识。比如用/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验证就完成了。

发布了14 篇原创文章 · 获赞 0 · 访问量 329

猜你喜欢

转载自blog.csdn.net/qq_38205881/article/details/103624319