【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>

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

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

三、功能测试

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

总结

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

  • 24
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 36
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 36
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ali.s

你的鼓励将是我前进的最好动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值