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

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

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

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

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

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

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

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

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

点赞 收藏 留言 都是我最大的动力

在这里插入图片描述

文章目录

  • 前言
  • 一、需求分析
  • 二、功能实现
    • 1.登录页面
    • 2.逻辑校验
    • 3.过滤器设置
    • 4.登录实现
    • 5.注销实现
  • 三、功能测试
  • 总结


前言

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


一、需求分析

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

二、功能实现

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>

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;
    }

3.过滤器设置

进入登录功能后,将不能直接访问main.jsp页面,除了在已经登录的状态下,无法反问系统的其它资源,只有在服务器校准数据的正确性时,才能进入系统访问私有的资源信息,对数据有保护作用,通过设置过滤器,将资源进行放过,在过滤器中先判断当前的请求是否是可以匿名访问的,如果是就放过,如果不是,就拦截并跳转回登录页面。【JAVA项目实战】【图书管理系统】登录模块【Servlet】+【Session】+【Filter】+【JSP】_第2张图片

 @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");
            }
        }

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");
        }
    }
}

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");
    }
}

三、功能测试

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

总结

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

你可能感兴趣的:(#,Java阶段二项目,Java后端,#,Java基础,java,servlet,开发语言,css3,软件工程)