文章大纲
加载中...

待办清单项目7:添加登录校验功能

4/24/2025 196 阅读
待办清单项目7:添加登录校验功能

为什么要做登录校验

  1. 原因1:启动服务器后,在浏览器可以通过下面的网址直接访问待办事项的网页

这是不合理的,用户都没有登录,怎么可以显示他的待办事项呢?

  1. 原因2:启动服务器后,在浏览器可以通过下面的网址

http://localhost:8080/TodoList/todo/add

http://localhost:8080/TodoList/todo/delete

http://localhost:8080/TodoList/todo/edit

http://localhost:8080/TodoList/todo/list

访问SysTodoController控制器,直接进行待办事项的增删改查

这些操作在用户没有登录的时候不应被允许

添加Session保存登录用户的功能

双击SysUserController文件,找到login登录方法,把else里面的代码改成下面这样

//4.1 把登录用户设置到session里面进行保存
req.getSession().setAttribute("loginUser", loginUser);
//4. 跳转到待办事项页面
resp.sendRedirect("/TodoList/todoList.html");

在用户每次登录成功后,服务器会将该用户保存到服务器的Session里面

添加过滤器

  1. com包上单击右键,新建软件包,取名为filter

  1. 在filter包上新建Java类,取名为LoginFilter,用于验证用户是否已经登录

  1. 编辑LoginFilter,代码如下:
package com.youngshu.todolist.filter;

import com.youngshu.todolist.pojo.SysUser;
import jakarta.servlet.*;
import jakarta.servlet.annotation.WebFilter;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;

import java.io.IOException;

// 定义一个过滤器,用于拦截对"/todoList.html"和"/todo/*"的请求
@WebFilter(urlPatterns = {"/todoList.html","/todo/*"})
public class LoginFilter implements Filter {

    // 实现Filter接口的doFilter方法,该方法会在请求被实际处理之前被调用
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        // 将ServletRequest和ServletResponse参数转换为HttpServletRequest和HttpServletResponse类型
        HttpServletRequest request =(HttpServletRequest)  servletRequest;
        HttpServletResponse response  =(HttpServletResponse) servletResponse;
        // 获取当前请求的HttpSession对象
        HttpSession session = request.getSession();
        // 从session中获取名为"loginUser"的属性,该属性应为SysUser类型的登录用户对象
        SysUser sysUser = (SysUser)session.getAttribute("loginUser");
        // 判断登录用户对象是否为空
        if(null == sysUser){
            // 如果用户对象为空,说明用户未登录,重定向到登录页面Login.html
            response.sendRedirect("/TodoList/login.html");
        }else{
            // 如果用户对象不为空,说明用户已登录,继续执行后续的过滤器或目标资源
            filterChain.doFilter(request,response);
        }
    }
}

测试

  1. 启动服务器,清空一下浏览器缓存,然后直接访问下面的网址:

http://localhost:8080/TodoList/todoList.html

http://localhost:8080/TodoList/todo/add

http://localhost:8080/TodoList/todo/delete

http://localhost:8080/TodoList/todo/edit

http://localhost:8080/TodoList/todo/list

会发现网页会跳转到登录页

  1. 在登录页登录之后,再尝试访问上面的网址,发现可以正常访问,说明登录校验过滤器配置成功。

评论 (0)

暂无评论,来发表第一条评论吧!