IGeekShop案例11-自动登录功能的基本实现

以你之姓@ 2024-04-17 14:12 197阅读 0赞

IGeekShop案例11-自动登录功能的基本实现

1 login.jsp代码

在这里插入图片描述

2 web层LoginServlet

  1. package www.test.web.servlet;
  2. import java.io.IOException;
  3. import java.sql.SQLException;
  4. import javax.servlet.ServletException;
  5. import javax.servlet.http.Cookie;
  6. import javax.servlet.http.HttpServlet;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9. import javax.servlet.http.HttpSession;
  10. import www.test.domain.User;
  11. import www.test.service.LoginService;
  12. public class LoginServlet extends HttpServlet {
  13. public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  14. // 解决乱码问题
  15. request.setCharacterEncoding("UTF-8");
  16. HttpSession session = request.getSession();
  17. // 获得页面输入的验证
  18. String checkCode_client = request.getParameter("checkCode");
  19. // 获得生成图片的文字的验证码
  20. String checkCode_session = (String) request.getSession().getAttribute("checkcode_session");
  21. // 比对页面的和生成图片的文字的验证码是否一致
  22. if (!checkCode_session.equals(checkCode_client)) {
  23. request.setAttribute("loginInfo", "您的验证码不正确");
  24. request.getRequestDispatcher("/login.jsp").forward(request, response);
  25. return;
  26. }
  27. // 获取用户输入的数据
  28. String username = request.getParameter("username");
  29. String password = request.getParameter("password");
  30. LoginService service = new LoginService();
  31. User user = null;
  32. try {
  33. user = service.login(username, password);
  34. } catch (SQLException e) {
  35. e.printStackTrace();
  36. }
  37. if (user != null) {
  38. // 登录成功
  39. // 判断用户是否勾选自动登录
  40. String autoLogin = request.getParameter("autoLogin");
  41. if (autoLogin != null) {
  42. Cookie cookie_username = new Cookie("cookie_username", user.getUsername());
  43. Cookie cookie_password = new Cookie("cookie_password", user.getPassword());
  44. // 设置 cookie 的持久化时间
  45. cookie_username.setMaxAge(60 * 60);
  46. cookie_password.setMaxAge(60 * 60);
  47. // 设置 cookie 的携带路径
  48. cookie_username.setPath(request.getContextPath());
  49. cookie_password.setPath(request.getContextPath());
  50. // 发送 cookie
  51. response.addCookie(cookie_username);
  52. response.addCookie(cookie_password);
  53. }
  54. //将登录的用户的 user 对象存到 session 中
  55. session.setAttribute("user", user);
  56. //重定向到首页
  57. response.sendRedirect(request.getContextPath());
  58. } else {
  59. request.setAttribute("loginInfo", "密码或者用户名不正确");
  60. request.getRequestDispatcher("/login.jsp").forward(request, response);
  61. }
  62. }
  63. public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  64. doGet(request, response);
  65. }
  66. }

3 web层AutoLoginFilter

  1. package www.test.web.filter;
  2. import java.io.IOException;
  3. import java.sql.SQLException;
  4. import javax.servlet.Filter;
  5. import javax.servlet.FilterChain;
  6. import javax.servlet.FilterConfig;
  7. import javax.servlet.ServletException;
  8. import javax.servlet.ServletRequest;
  9. import javax.servlet.ServletResponse;
  10. import javax.servlet.http.Cookie;
  11. import javax.servlet.http.HttpServletRequest;
  12. import javax.servlet.http.HttpServletResponse;
  13. import javax.servlet.http.HttpSession;
  14. import www.test.domain.User;
  15. import www.test.service.LoginService;
  16. public class AutoLoginFilter implements Filter {
  17. public AutoLoginFilter() {
  18. super();
  19. }
  20. private FilterConfig filterConfig;
  21. public void init(FilterConfig filterConfig) throws ServletException {
  22. this.filterConfig = filterConfig;
  23. }
  24. public void doFilter(ServletRequest req, ServletResponse res, FilterChain filterChain)
  25. throws IOException, ServletException {
  26. HttpServletRequest request = (HttpServletRequest) req;
  27. HttpServletResponse response = (HttpServletResponse) res;
  28. HttpSession session = request.getSession();
  29. // 获得 cookie 中用户名和密码 进行登录的操作
  30. // 定义 cookie_username
  31. String cookie_username = null;
  32. // 定义 cookie_password
  33. String cookie_password = null;
  34. // 获得 cookie
  35. Cookie[] cookies = request.getCookies();
  36. if (cookies != null) {
  37. for (Cookie cookie : cookies) {// 获得名字是 cookie_username 和
  38. // cookie_password
  39. if ("cookie_username".equals(cookie.getName())) {
  40. cookie_username = cookie.getValue();
  41. }
  42. if ("cookie_password".equals(cookie.getName())) {
  43. cookie_password = cookie.getValue();
  44. }
  45. }
  46. }
  47. // 判断 username 和 password 是否是 null
  48. if (cookie_username != null && cookie_password != null) {
  49. // 登录的代码
  50. LoginService service = new LoginService();
  51. User user = null;
  52. try {
  53. user = service.login(cookie_username, cookie_password);
  54. } catch (SQLException e) {
  55. e.printStackTrace();
  56. }
  57. // 将登录的用户的 user 对象存到 session 中
  58. session.setAttribute("user", user);
  59. }
  60. //放行
  61. filterChain.doFilter(request, response);
  62. }
  63. public void destroy() {
  64. }
  65. }

4 service层LoginService

  1. package www.test.service;
  2. import java.sql.SQLException;
  3. import www.test.dao.LoginDao;
  4. import www.test.domain.User;
  5. public class LoginService {
  6. public User login(String username, String password) throws SQLException {
  7. LoginDao dao = new LoginDao();
  8. return dao.login(username,password);
  9. }
  10. }

5 dao层LoginDao

  1. package www.test.dao;
  2. import java.sql.SQLException;
  3. import org.apache.commons.dbutils.QueryRunner;
  4. import org.apache.commons.dbutils.handlers.BeanHandler;
  5. import www.test.domain.User;
  6. import www.test.utils.C3P0Utils;
  7. public class LoginDao {
  8. public User login(String username, String password) throws SQLException {
  9. QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
  10. String sql = "select * from user where username =? and password = ?";
  11. return qr.query(sql, new BeanHandler<User>(User.class), username,password);
  12. }
  13. }

6 header.jsp代码

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
  4. <!DOCTYPE html>
  5. <!-- 登录 注册 购物车... -->
  6. <div class="container-fluid">
  7. <div class="col-md-4">
  8. <img src="img/logo2.png" />
  9. </div>
  10. <div class="col-md-5">
  11. <img src="img/header.png" />
  12. </div>
  13. <div class="col-md-3" style="padding-top: 20px">
  14. <ol class="list-inline">
  15. <c:if test="${empty user }">
  16. <li><a href="login.jsp">登录</a></li>
  17. <li><a href="register.jsp">注册</a></li>
  18. </c:if>
  19. <c:if test="${!empty user }">
  20. <li>欢迎您,${user.username }</li>
  21. <li><a href="#">退出</a></li>
  22. </c:if>
  23. <li><a href="cart.jsp">购物车</a></li>
  24. <li><a href="order_list.jsp">我的订单</a></li>
  25. </ol>
  26. </div>
  27. </div>
  28. <!-- 导航条 -->
  29. <div class="container-fluid">
  30. <nav class="navbar navbar-inverse">
  31. <div class="container-fluid">
  32. <!-- Brand and toggle get grouped for better mobile display -->
  33. <div class="navbar-header">
  34. <button type="button" class="navbar-toggle collapsed"
  35. data-toggle="collapse" data-target="#bs-example-navbar-collapse-1"
  36. aria-expanded="false">
  37. <span class="sr-only">Toggle navigation</span> <span
  38. class="icon-bar"></span> <span class="icon-bar"></span> <span
  39. class="icon-bar"></span>
  40. </button>
  41. <a class="navbar-brand" href="#">首页</a>
  42. </div>
  43. <div class="collapse navbar-collapse"
  44. id="bs-example-navbar-collapse-1">
  45. <ul class="nav navbar-nav">
  46. <li class="active"><a href="product_list.htm">手机数码<span
  47. class="sr-only">(current)</span></a></li>
  48. <li><a href="#">电脑办公</a></li>
  49. <li><a href="#">电脑办公</a></li>
  50. <li><a href="#">电脑办公</a></li>
  51. </ul>
  52. <form class="navbar-form navbar-right" role="search">
  53. <div class="form-group" style="position: relative">
  54. <input type="text" class="form-control" placeholder="Search"
  55. onkeyup="searchWord(this)">
  56. <div id="showDiv"
  57. style="display: none; position: absolute; z-index: 1000; background: #fff; width: 179px; border: 1px solid #ccc;">
  58. </div>
  59. </div>
  60. <button type="submit" class="btn btn-default">Submit</button>
  61. </form>
  62. <!-- 完成站内搜索 -->
  63. <script type="text/javascript">
  64. function overFn(obj) {
  65. $(obj).css("background", "#DBEAF9");
  66. }
  67. function outFn(obj) {
  68. $(obj).css("background", "#fff");
  69. }
  70. function clickFn(obj) {
  71. $("#search").val($(obj).html());
  72. $("#showDiv").css("display", "none");
  73. }
  74. function searchWord(obj) {
  75. //1、 获得输入框的输入的内容
  76. var word = $(obj).val();
  77. //2、 根据输入框的内容去数据库中模糊查询---List<Product>
  78. var content = "";
  79. $
  80. .post(
  81. "${pageContext.request.contextPath}/searchWord",
  82. {
  83. "word" : word
  84. },
  85. function(data) {
  86. if (data.length > 0) {
  87. for (var i = 0; i < data.length; i++) {
  88. content += "<div style='padding:5px;cursor:pointer'onclick='clickFn(this)' onmouseover='overFn(this)'onmouseout='outFn(this)'>"
  89. + data[i]
  90. + "</div>";
  91. }
  92. $("#showDiv").html(content);
  93. $("#showDiv").css("display",
  94. "block");
  95. }
  96. }, "json");
  97. }
  98. </script>
  99. </div>
  100. </div>
  101. </nav>
  102. </div>

7 filter配置文件

  1. <filter>
  2. <filter-name>AutoLoginFilter</filter-name>
  3. <filter-class>www.test.web.filter.AutoLoginFilter</filter-class>
  4. </filter>
  5. <filter-mapping>
  6. <filter-name>AutoLoginFilter</filter-name>
  7. <url-pattern>/*</url-pattern>
  8. </filter-mapping>

注:这里是servlet5之前的配置,servlet5之后使用

  1. @WebFilter(filterName = "/AutoLoginFilter",
  2. urlPatterns={"/indexServlet","/index.jsp","/login.jsp","/LoginServlet"})

发表评论

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

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

相关阅读

    相关 nuxt实现自动登录功能

    1,实现逻辑 1)登录时用户勾选自动登录后,将用户的登录信息(一般为账号和密码)储存到本地cookie(localStorage同),并设置一个过期时间; 2)用户退出后下