登录验证
代码验证
package com.itheima.web.filter;import javax.servlet.*;import javax.servlet.annotation.*;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpSession;import java.io.IOException;/** * 登录验证的过滤器 */@WebFilter("/*")public class LoginFilter implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException { // 要使用http中的session对象方法 // 要将ServletRequest对象类型强转为HttpServletRequest,才可以使用 HttpServletRequest req = (HttpServletRequest) request; // 判断访问路径资源是否和登陆注册相关,相关的都放行(如果过滤掉了,这些登录// 页面的图片资源将不会显示) String[] urls = {"/login.jsp","/imgs/","/css/","/loginServlet","/register.jsp", "/registerServlet","/checkCodeServlet"}; // 获取当前访问路径的资源 String url = req.getRequestURI().toString(); // 循环判断 for (String u : urls) { if (url.contains(u)){ // 找到了 // 放行 chain.doFilter(request,response); // 放行了之后,不执行后面的,把方法结束掉 return; } } // 1. 判断session中是否有user HttpSession session = req.getSession(); Object user = session.getAttribute("user"); // 2. 判断user是否为null if (user != null) { // 登录过了 // 放行 chain.doFilter(request, response); }else { // 没有登录,存储提示信息,跳转到登录页面 // 这里使用req,或者request都没有问题,我们只是将请求对象request进行了强转,没有改变里面的数据 req.setAttribute("login_msg","您尚未登录"); req.getRequestDispatcher("/login.jsp").forward(req,response); } } public void init(FilterConfig config) throws ServletException { } public void destroy() { }}