登录验证

image.png

代码验证

  1. package com.itheima.web.filter;
  2. import javax.servlet.*;
  3. import javax.servlet.annotation.*;
  4. import javax.servlet.http.HttpServletRequest;
  5. import javax.servlet.http.HttpSession;
  6. import java.io.IOException;
  7. /**
  8. * 登录验证的过滤器
  9. */
  10. @WebFilter("/*")
  11. public class LoginFilter implements Filter {
  12. @Override
  13. public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
  14. // 要使用http中的session对象方法
  15. // 要将ServletRequest对象类型强转为HttpServletRequest,才可以使用
  16. HttpServletRequest req = (HttpServletRequest) request;
  17. // 判断访问路径资源是否和登陆注册相关,相关的都放行(如果过滤掉了,这些登录
  18. // 页面的图片资源将不会显示)
  19. String[] urls = {"/login.jsp","/imgs/","/css/","/loginServlet","/register.jsp",
  20. "/registerServlet","/checkCodeServlet"};
  21. // 获取当前访问路径的资源
  22. String url = req.getRequestURI().toString();
  23. // 循环判断
  24. for (String u : urls) {
  25. if (url.contains(u)){
  26. // 找到了
  27. // 放行
  28. chain.doFilter(request,response);
  29. // 放行了之后,不执行后面的,把方法结束掉
  30. return;
  31. }
  32. }
  33. // 1. 判断session中是否有user
  34. HttpSession session = req.getSession();
  35. Object user = session.getAttribute("user");
  36. // 2. 判断user是否为null
  37. if (user != null) {
  38. // 登录过了
  39. // 放行
  40. chain.doFilter(request, response);
  41. }else {
  42. // 没有登录,存储提示信息,跳转到登录页面
  43. // 这里使用req,或者request都没有问题,我们只是将请求对象request进行了强转,没有改变里面的数据
  44. req.setAttribute("login_msg","您尚未登录");
  45. req.getRequestDispatcher("/login.jsp").forward(req,response);
  46. }
  47. }
  48. public void init(FilterConfig config) throws ServletException {
  49. }
  50. public void destroy() {
  51. }
  52. }