• 【JAVA项目实战】【图书管理系统】登录模块【Servlet】+【Session】+【Filter】+【JSP】


    🚀个人主页:欢迎访问Ali.s的首页

    ⏰ 最近更新:2022年9月6日

    Java框架学习系列:【Spring】【SpringMVC】【Mybatis】

    🔥 Java项目实战系列:【飞机大战】【图书管理系统】

    🍭 Java算法21天系列:【查找】【排序】【递归】

    ⛳ Java基础学习系列:【继承】【封装】【多态】

    🏆 通信仿真学习系列:【硬件】【通信】【MATLAB】

    🍄 个人简介:通信工程本硕🌈、Java程序员🚴。目前只会CURD😂

    💌 点赞 👍 收藏 💗留言 💬 都是我最大的动力💯

    在这里插入图片描述


    前言

    这里是【JAVASE】项目实战的第五节课,前面完成了用户模块的所有功能,今天做的是登录功能,使用【Servlet】【Session】【Filterl】【JSP】来实现登录和注销功能。


    一、需求分析

    在前面用用户新增功能实现后,可以清楚的看到用户直接进入了后台的主界面,登录模块应该是每个管理系统必备的功能模块的,通过登录模块来达到数据安全,用户区分的目的,对于在校学生类型的管理系统,应当需要添加一个登录模块,需要账号密码才能进入系统,防止学生信息泄露。下面对登录模块进行需求分析。
    在这里插入图片描述
    当用户在浏览器登录页面提交用户名和密码后。通过服务器解析数据,与数据库信息进行校验,如果账户密码正确,则进行页面重定向操作到主界面。如果账号密码错误,则在浏览器前端登录页面给出相应的信息。如果账号未注册 ,则提示该账号无效。

    二、功能实现

    dao层和service层中创建接口。这里与用户模块类似,首先完成前端页面的信息,然后进行后端的校验逻辑的判断,到层处理sql语句。

    1.登录页面

    创建login.jsp页面,对提交的表单信息进行处理,当点击提交账号密码时,通过post请求进入登陆的控制层servlet,在servlet进行数据处理操作。在账号密码都正确时进入主界面,而当其错误时,返回到登录页面,并对用户给出信息错误的提示。

    <div class="loginbody">
        <span class="systemlogo">span>
        <div class="loginbox">
            <form action="/loginServlet" method="post">
     <ul>
        <li>
           <input name="userName" type="text" class="loginuser" value="admin" />
        li>
        <li>
    		<input name="password" type="password" class="loginpwd" value="123"/>
     	li>
         <li>
            <input name="" type="submit" class="loginbtn" value="登录"/>
            <label>
           		  <input name="" type="checkbox" value="" checked="checked" />
                            记住密码
            label>
            <label>
                   <c:if test="${empty sessionScope.msg}">
                       <a href="#">忘记密码?a>
                    c:if>
                    <c:if test="${not empty sessionScope.msg}">
                         <span style="color: red">${sessionScope.msg}span>
                    c:if>
            label>
          li>
        ul>
      form>
     div>
    div>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    2.逻辑校验

    通过检查账号和密码,对用户的真实性做出判读,在到dao层完成此方法,在service层进行调用。

    @Override
        public User checkUserNameAndPassword(String userName, String password) {
            QueryRunner queryRunner = DBUtils.getQueryRunner();
            String sql="select * from t_user where is_deleted=? and user_name=? and password=?";
            try {
            return  queryRunner.query(sql, new ResultSetHandler<User>() {
                    @Override
                    public User handle(ResultSet resultSet) throws SQLException {
                        if (resultSet.next()){
                            User user=new User();
                            user.setUserName(resultSet.getString("user_name"));
                            user.setId(resultSet.getInt("id"));
                            user.setPassword(resultSet.getString("password"));
                            user.setPhoneNum(resultSet.getString("phone_num"));
                            user.setEmail(resultSet.getString("email"));
                            return user;
                        }
                        return null;
                    }
                },DelFlag.No.code,userName,password);
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return null;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    3.过滤器设置

    进入登录功能后,将不能直接访问main.jsp页面,除了在已经登录的状态下,无法反问系统的其它资源,只有在服务器校准数据的正确性时,才能进入系统访问私有的资源信息,对数据有保护作用,通过设置过滤器,将资源进行放过,在过滤器中先判断当前的请求是否是可以匿名访问的,如果是就放过,如果不是,就拦截并跳转回登录页面。在这里插入图片描述

     @Override
      public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
       HttpServletRequest request=(HttpServletRequest) servletRequest;
       HttpServletResponse response=(HttpServletResponse) servletResponse;
        //获取跳转的页面的后缀
         String requestURI= request.getRequestURI();
        //判断是否是登录页面
        if (requestURI.contains("login.jsp") || requestURI.contains("loginServlet"){
                filterChain.doFilter(servletRequest,servletResponse);
            }else{
                //判断是否是登录状态
                HttpSession session=request.getSession();
                Object attribute = session.getAttribute(Constant.SESSION_LONGIN);
                if (attribute!=null){
                    //已经登录
                    filterChain.doFilter(servletRequest, servletResponse);
                }else{
                    //没有登录,进行跳转到登录页面
                    session.setAttribute("msg","请先登录后,再继续操作");
                    response.sendRedirect("/login.jsp");
                }
            }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    4.登录实现

    Servlet中进行获取登录功能的实现,创建LoginServlet,对表单信息做绑定。

      package com.song.bookmanagersystem.controller;
    import com.song.bookmanagersystem.entity.User;
    import com.song.bookmanagersystem.service.UserService;
    import com.song.bookmanagersystem.service.impl.UserServiceImpl;
    import com.song.bookmanagersystem.utils.Constant;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    import java.io.IOException;
    @WebServlet(name="loginServlet",urlPatterns = "/loginServlet")
    public class LoginServlet extends HttpServlet {
        UserService userService=new UserServiceImpl();
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //get请求也是使用post请求
            this.doPost(req,resp);
        }
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //1.获取表单提交的信息
            String userName=req.getParameter("userName");
            String password=req.getParameter("password");
            //2.调用service中的方法来验证
            User user = userService.checkUserNameAndPassword(userName, password);
            HttpSession session = req.getSession();
            //3.根据验证的结果来做出对应的响应
            if (user !=null){
                //防止密码泄露
                user.setPassword(null);
                //登录成功,拿到用户信息给session
                session.setAttribute(Constant.SESSION_LONGIN,user);
                resp.sendRedirect("/main.jsp");
            }else{
                session.setAttribute("msg","账号密码错误");
                resp.sendRedirect("/login.jsp");
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41

    5.注销实现

    在登录模块有登录就肯定有注销,退出当前登录的状态,用户显示的点击【退出】钮,实现退出功能,创建LogoutServlet,对参数进行绑定。

     package com.song.bookmanagersystem.controller;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    import java.io.IOException;
    
    @WebServlet(name = "logoutServlet",urlPatterns = "/logoutServlet")
    public class LogoutServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            this.doPost(req, resp);
        }
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            HttpSession session = req.getSession();
            //注销方法
            session.invalidate();
            //进行重定向操作
            resp.sendRedirect("/login.jsp");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    三、功能测试

    启动服务器,让项目在服务器中运行,进入登录页面,这里初始化默认为前面创建的已有的用户信息,提示登录后,再继续操作:在这里插入图片描述
    输入正确的账户信息,点击记住密码,这里记住密码也是在数据校验阶段进行数据库信息比对后,通过cookie值进行本地缓存,方便下次登录。进入主页面:
    在这里插入图片描述
    点击退出按钮,对当前用户进行注销,返回登录页面,再输入错误的用户密码信息,检测是否还能访问首页信息,确保过滤器设置正确。
    在这里插入图片描述
    输入错误的用户信息,点击提交后,重新回到登录页面,并在页面提示账号密码错误,说明过滤器设置生效,至此登录模块的功能全部实现。
    在这里插入图片描述

    总结

    以上就是今天要讲的内容,使用【Servlet】【Session】【Filterl】【JSP】完成登录模块,对用户数据进行校验避免直接进入主页,设置过滤器保证资源的安全,通过Session记住密码,与本地的Cookie共同作用,实现用户登录和注销的功能。

  • 相关阅读:
    mybatis拦截器实现数据权限
    chatgpt论文润色 & 降重
    代码随想录算法训练营第二十三天|669 修剪二叉搜索树 108 将有序数组转换为二叉搜索树 538 把二叉搜索树转换为累加树
    黑马瑞吉外卖之移动端验证码登录使用qq邮箱
    2023/10/1 -- ARM
    canal安装与客户端使用
    最新中文版本FLStudio21水果音乐软件更新下载
    sqlserver不使用group by进行分组合并
    elasticsearch性能优化
    wpf中prism框架
  • 原文地址:https://blog.csdn.net/dxcn01/article/details/126709060