JSP/Servlet实现简单的登录校验

╰+攻爆jí腚メ 2021-09-29 05:18 500阅读 0赞

有很多的JavaWeb系统都需要先通过用户的登录,来校验用户的合法身份后,才可以进入使用该系统。下面将使用JSP/Servlet实现一个简单的登录校验功能。

1、项目结构与说明

1.1 项目的结构图

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3Bhbl9qdW5iaWFv_size_16_color_FFFFFF_t_70

1.2 结构说明

(1)model目录(模型层):

LoginUser.java类:登录用户信息类,用于保存当前登录用户信息的实体类。

(2)servlet目录(业务逻辑层):

LoginServlet.java类:登录验证Servlet类,用于验证登录人信息是否合法。

LogoutServlet.java类:注销Servlet类,用于注销登录。

(3)filter目录(过滤器层):

LoginAuthorizeFilter.java类:登录验证过滤器,用于在请求页面前,校验用户是否完成登录操作。

(4)web目录(表示层):

index.jsp页面:系统的首页,用于展示当前登录人名称和相关信息。

login.jsp页面:登录页面,用于用户输入相关登录信息。

2、实现步骤

(1)创建model目录(模型层),并在该目录下创建 LoginUser.java 类(登录用户信息类),用于保存当前登录用户信息的实体类。

  1. package model;
  2. /**
  3. * 登录用户信息类
  4. *
  5. * @author pan_junbiao
  6. */
  7. public class LoginUser
  8. {
  9. private int userId; //用户ID
  10. private String userName; //用户姓名
  11. public int getUserId()
  12. {
  13. return userId;
  14. }
  15. public void setUserId(int userId)
  16. {
  17. this.userId = userId;
  18. }
  19. public String getUserName()
  20. {
  21. return userName;
  22. }
  23. public void setUserName(String userName)
  24. {
  25. this.userName = userName;
  26. }
  27. }

(2)创建servlet目录(业务逻辑层),并在该目录下创建 LoginServlet.java 类(登录验证Servlet类),用于验证登录人信息是否合法。

  1. package servlet;
  2. import model.LoginUser;
  3. import javax.servlet.ServletException;
  4. import javax.servlet.annotation.WebServlet;
  5. import javax.servlet.http.HttpServlet;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. import javax.servlet.http.HttpSession;
  9. import java.io.IOException;
  10. /**
  11. * 登录验证Servlet类
  12. *
  13. * @author pan_junbiao
  14. */
  15. @WebServlet(name = "LoginServlet", urlPatterns = "/servlet/LoginServlet")
  16. public class LoginServlet extends HttpServlet
  17. {
  18. @Override
  19. protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
  20. {
  21. //将输出转换成中文
  22. req.setCharacterEncoding("UTF-8");
  23. // 获取参数
  24. String account = req.getParameter("user");
  25. String password = req.getParameter("password");
  26. //判断用户是否登录成功
  27. if (account.equals("pan_junbiao的博客") && password.equals("123456"))
  28. {
  29. //保存用户登录信息类
  30. LoginUser loginUser = new LoginUser();
  31. loginUser.setUserId(1);
  32. loginUser.setUserName("吖标");
  33. //记录Session相关信息
  34. HttpSession session = req.getSession();
  35. session.setAttribute("LoginUser", loginUser);
  36. // 重定向进入首页
  37. resp.sendRedirect(req.getContextPath() + "/index.jsp");
  38. }
  39. else
  40. {
  41. // 验证失败,则重定向到登录页面,并标记参数i为1表示登录失败
  42. resp.sendRedirect(req.getContextPath() + "/login.jsp?i=1");
  43. }
  44. }
  45. }

(3)在servlet目录(业务逻辑层)下创建 LogoutServlet.java 类(注销Servlet类),用于注销登录。

  1. package servlet;
  2. import javax.servlet.ServletException;
  3. import javax.servlet.annotation.WebServlet;
  4. import javax.servlet.http.HttpServlet;
  5. import javax.servlet.http.HttpServletRequest;
  6. import javax.servlet.http.HttpServletResponse;
  7. import java.io.IOException;
  8. /**
  9. * 注销Servlet
  10. *
  11. * @author pan_junbiao
  12. */
  13. @WebServlet(name = "LogoutServlet", urlPatterns = "/servlet/LogoutServlet")
  14. public class LogoutServlet extends HttpServlet
  15. {
  16. @Override
  17. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
  18. {
  19. doPost(req, resp);
  20. }
  21. @Override
  22. protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
  23. {
  24. //销毁session对象
  25. req.getSession().invalidate();
  26. //重定向到登录页面
  27. resp.sendRedirect(req.getContextPath() + "/login.jsp");
  28. }
  29. }

(4)创建filter目录(过滤器层),并在该目录下创建 LoginAuthorizeFilter.java 类(登录验证过滤器),用于在请求页面前,校验用户是否完成登录操作。

  1. package filter;
  2. import model.LoginUser;
  3. import javax.servlet.*;
  4. import javax.servlet.annotation.WebFilter;
  5. import javax.servlet.http.HttpServletRequest;
  6. import javax.servlet.http.HttpServletResponse;
  7. import javax.servlet.http.HttpSession;
  8. import java.io.IOException;
  9. /**
  10. * 登录验证过滤器
  11. *
  12. * @author pan_junbiao
  13. */
  14. @WebFilter(filterName = "LoginAuthorizeFilter", urlPatterns = "/*")
  15. public class LoginAuthorizeFilter implements Filter
  16. {
  17. // 初始化方法
  18. @Override
  19. public void init(FilterConfig filterConfig) throws ServletException
  20. {
  21. }
  22. // 过滤处理方法
  23. @Override
  24. public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
  25. throws IOException, ServletException
  26. {
  27. HttpServletRequest httpServletRequest = (HttpServletRequest) request;
  28. String servletPath = httpServletRequest.getServletPath(); //获取客户端所请求的脚本文件的文件路径
  29. //不过滤处理登录页面、JS和CSS文件
  30. if (!servletPath.equals("/login.jsp") && !servletPath.equals("/servlet/LoginServlet")
  31. && !servletPath.endsWith(".js") && !servletPath.endsWith(".css"))
  32. {
  33. boolean verifyRes = false; //校验结果
  34. //获取Session对象
  35. HttpSession session = httpServletRequest.getSession();
  36. Object loginObj = session.getAttribute("LoginUser");
  37. if (loginObj instanceof LoginUser)
  38. {
  39. LoginUser loginUser = (LoginUser) loginObj;
  40. if (loginUser.getUserId() > 0)
  41. {
  42. //校验成功
  43. verifyRes = true;
  44. }
  45. }
  46. //判断校验结果,如果校验失败则重定向到登录页面
  47. if (!verifyRes)
  48. {
  49. HttpServletResponse httpServletResponse = (HttpServletResponse) response;
  50. //重定向到登录页面
  51. httpServletResponse.sendRedirect(httpServletRequest.getContextPath() + "/login.jsp");
  52. }
  53. else
  54. {
  55. // 传递给下一过滤器
  56. chain.doFilter(request, response);
  57. }
  58. }
  59. else
  60. {
  61. // 传递给下一过滤器
  62. chain.doFilter(request, response);
  63. }
  64. }
  65. // 销毁方法
  66. @Override
  67. public void destroy()
  68. {
  69. // 释放资源
  70. }
  71. }

(5)在web目录(表示层)下创建 login.jsp页面(登录页面),用于用户输入相关登录信息。

  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  2. <html>
  3. <head>
  4. <title>登录</title>
  5. <meta name="author" content="pan_junbiao的博客">
  6. <script>
  7. //页面初始化
  8. window.onload = function() {
  9. var i = getUrlParam("i");
  10. if (i == 1) {
  11. document.getElementById("spInfo").innerText = "登录失败,用户名或密码不正确。";
  12. } else {
  13. document.getElementById("spInfo").innerText = "";
  14. }
  15. }
  16. //提交登录
  17. function SubmitLogin() {
  18. //判断用户名是否为空
  19. if (!form1.user.value) {
  20. alert("请输入用户名!");
  21. form1.user.focus();
  22. return false;
  23. }
  24. //判断密码是否为空
  25. if (!form1.password.value) {
  26. alert("请输入密码!");
  27. form1.password.focus();
  28. return false;
  29. }
  30. return true;
  31. }
  32. //获取URL中的request参数
  33. function getUrlParam(name) {
  34. var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
  35. var r = window.location.search.substr(1).match(reg);
  36. if (r != null) {
  37. return decodeURIComponent(r[2]);
  38. } else {
  39. return "";
  40. }
  41. }
  42. </script>
  43. </head>
  44. <body>
  45. <div align="center">请输入登录信息
  46. <form name="form1" method="post" action="servlet/LoginServlet" onsubmit="return SubmitLogin()">
  47. <table>
  48. <tr>
  49. <td>用户:</td>
  50. <td><input type="text" name="user" style="width:200px" /></td>
  51. </tr>
  52. <tr>
  53. <td>密码:</td>
  54. <td><input type="password" name="password" style="width:200px"/></td>
  55. </tr>
  56. <!-- 以下是提交、取消按钮 -->
  57. <tr>
  58. <td>
  59. <input type="submit" value="登录" />
  60. </td>
  61. <td>
  62. <input type="reset" value="取消" />
  63. </td>
  64. </tr>
  65. </table>
  66. </form>
  67. <span id="spInfo" style="color:red"></span>
  68. </div>
  69. </body>
  70. </html>

运行 login.jsp页面(登录页面)。

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3Bhbl9qdW5iaWFv_size_16_color_FFFFFF_t_70 1

登录失败的情况。

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3Bhbl9qdW5iaWFv_size_16_color_FFFFFF_t_70 2

(6)在web目录(表示层)下创建 index.jsp页面(系统的首页),用于展示当前登录人名称和相关信息。

  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  2. <%@ page import="model.LoginUser" %>
  3. <html>
  4. <head>
  5. <title>首页</title>
  6. <meta name="author" content="pan_junbiao的博客">
  7. <%
  8. //获取登录人姓名
  9. String userName = "";
  10. LoginUser loginUser = (LoginUser) session.getAttribute("LoginUser");
  11. userName = loginUser.getUserName();
  12. %>
  13. </head>
  14. <body>
  15. <h1>首页</h1>
  16. <a href="servlet/LogoutServlet" onclick="return confirm('确认注销吗?');" >注销</a>
  17. <p>当前登录人名称:<%= userName %></p>
  18. <p>您好,欢迎访问 pan_junbiao的博客!</p>
  19. <p>博客地址:https://blog.csdn.net/pan_junbiao</p>
  20. </body>
  21. </html>

登录成功,进入首页。

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3Bhbl9qdW5iaWFv_size_16_color_FFFFFF_t_70 3

发表评论

表情:
评论列表 (有 0 条评论,500人围观)

还没有评论,来说两句吧...

相关阅读