zoukankan      html  css  js  c++  java
  • 案例11-自动登录功能的基本实现

    1 login.jsp代码

    2 web层LoginServlet

    package www.test.web.servlet;
    
    import java.io.IOException;
    import java.sql.SQLException;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    
    import www.test.domain.User;
    import www.test.service.LoginService;
    
    public class LoginServlet extends HttpServlet {
    
        public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
            // 解决乱码问题
            request.setCharacterEncoding("UTF-8");
            HttpSession session = request.getSession();
    
            // 获得页面输入的验证
            String checkCode_client = request.getParameter("checkCode");
            // 获得生成图片的文字的验证码
            String checkCode_session = (String) request.getSession().getAttribute("checkcode_session");
            // 比对页面的和生成图片的文字的验证码是否一致
            if (!checkCode_session.equals(checkCode_client)) {
                request.setAttribute("loginInfo", "您的验证码不正确");
                request.getRequestDispatcher("/login.jsp").forward(request, response);
                return;
            }
            // 获取用户输入的数据
            String username = request.getParameter("username");
            String password = request.getParameter("password");
    
            LoginService service = new LoginService();
            User user = null;
            try {
                user = service.login(username, password);
            } catch (SQLException e) {
    
                e.printStackTrace();
            }
    
            if (user != null) {
                // 登录成功
                // 判断用户是否勾选自动登录
                String autoLogin = request.getParameter("autoLogin");
                if (autoLogin != null) {
                    Cookie cookie_username = new Cookie("cookie_username", user.getUsername());
                    Cookie cookie_password = new Cookie("cookie_password", user.getPassword());
                    // 设置 cookie 的持久化时间
                    cookie_username.setMaxAge(60 * 60);
                    cookie_password.setMaxAge(60 * 60);
                    // 设置 cookie 的携带路径
                    cookie_username.setPath(request.getContextPath());
                    cookie_password.setPath(request.getContextPath());
                    // 发送 cookie
                    response.addCookie(cookie_username);
                    response.addCookie(cookie_password);
                }
                
                //将登录的用户的 user 对象存到 session 中
                session.setAttribute("user", user);
                //重定向到首页
                response.sendRedirect(request.getContextPath());
            } else {
                request.setAttribute("loginInfo", "密码或者用户名不正确");
                request.getRequestDispatcher("/login.jsp").forward(request, response);
            }
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }
    
    }

    3 web层AutoLoginFilter

    package www.test.web.filter;
    
    import java.io.IOException;
    import java.sql.SQLException;
    
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    
    import www.test.domain.User;
    import www.test.service.LoginService;
    
    public class AutoLoginFilter implements Filter {
    
        public AutoLoginFilter() {
            super();
        }
    
        private FilterConfig filterConfig;
    
        public void init(FilterConfig filterConfig) throws ServletException {
    
            this.filterConfig = filterConfig;
    
        }
    
        public void doFilter(ServletRequest req, ServletResponse res, FilterChain filterChain)
                throws IOException, ServletException {
    
            HttpServletRequest request = (HttpServletRequest) req;
    
            HttpServletResponse response = (HttpServletResponse) res;
    
            HttpSession session = request.getSession();
    
            // 获得 cookie 中用户名和密码 进行登录的操作
            // 定义 cookie_username
            String cookie_username = null;
            // 定义 cookie_password
            String cookie_password = null;
            // 获得 cookie
            Cookie[] cookies = request.getCookies();
            if (cookies != null) {
                for (Cookie cookie : cookies) {// 获得名字是 cookie_username 和
                                                // cookie_password
                    if ("cookie_username".equals(cookie.getName())) {
                        cookie_username = cookie.getValue();
                    }
                    if ("cookie_password".equals(cookie.getName())) {
                        cookie_password = cookie.getValue();
                    }
                }
            }
            // 判断 username 和 password 是否是 null
            if (cookie_username != null && cookie_password != null) {
                // 登录的代码
                LoginService service = new LoginService();
                
                User user = null;
                try {
                    user = service.login(cookie_username, cookie_password);
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                // 将登录的用户的 user 对象存到 session 中
                session.setAttribute("user", user);
            }
    //放行
            filterChain.doFilter(request, response);
        }
    
        public void destroy() {
    
        }
    }

    4 service层LoginService

    package www.test.service;
    
    import java.sql.SQLException;
    
    import www.test.dao.LoginDao;
    import www.test.domain.User;
    
    public class LoginService {
    
        public User login(String username, String password) throws SQLException {
            LoginDao dao = new LoginDao();
            return dao.login(username,password);
        }
    
    }

    5 dao层LoginDao

    package www.test.dao;
    
    import java.sql.SQLException;
    
    import org.apache.commons.dbutils.QueryRunner;
    import org.apache.commons.dbutils.handlers.BeanHandler;
    
    import www.test.domain.User;
    import www.test.utils.C3P0Utils;
    
    public class LoginDao {
    
        public User login(String username, String password) throws SQLException {
            QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
            String sql = "select * from user where username =? and password = ?";
            return qr.query(sql, new BeanHandler<User>(User.class), username,password);
            
        }
    
    }

    6 header.jsp代码

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    <!DOCTYPE html>
    <!-- 登录 注册 购物车... -->
    <div class="container-fluid">
        <div class="col-md-4">
            <img src="img/logo2.png" />
        </div>
        <div class="col-md-5">
            <img src="img/header.png" />
        </div>
        <div class="col-md-3" style="padding-top: 20px">
            <ol class="list-inline">
                <c:if test="${empty user }">
                    <li><a href="login.jsp">登录</a></li>
                    <li><a href="register.jsp">注册</a></li>
                </c:if>
                <c:if test="${!empty user }">
                    <li>欢迎您,${user.username }</li>
                    <li><a href="#">退出</a></li>
                </c:if>
                
                <li><a href="cart.jsp">购物车</a></li>
                <li><a href="order_list.jsp">我的订单</a></li>
            </ol>
        </div>
    </div>
    
    <!-- 导航条 -->
    <div class="container-fluid">
        <nav class="navbar navbar-inverse">
            <div class="container-fluid">
                <!-- Brand and toggle get grouped for better mobile display -->
                <div class="navbar-header">
                    <button type="button" class="navbar-toggle collapsed"
                        data-toggle="collapse" data-target="#bs-example-navbar-collapse-1"
                        aria-expanded="false">
                        <span class="sr-only">Toggle navigation</span> <span
                            class="icon-bar"></span> <span class="icon-bar"></span> <span
                            class="icon-bar"></span>
                    </button>
                    <a class="navbar-brand" href="#">首页</a>
                </div>
    
                <div class="collapse navbar-collapse"
                    id="bs-example-navbar-collapse-1">
                    <ul class="nav navbar-nav">
                        <li class="active"><a href="product_list.htm">手机数码<span
                                class="sr-only">(current)</span></a></li>
                        <li><a href="#">电脑办公</a></li>
                        <li><a href="#">电脑办公</a></li>
                        <li><a href="#">电脑办公</a></li>
                    </ul>
                    <form class="navbar-form navbar-right" role="search">
                        <div class="form-group" style="position: relative">
                            <input type="text" class="form-control" placeholder="Search"
                                onkeyup="searchWord(this)">
                            <div id="showDiv"
                                style="display: none; position: absolute; z-index: 1000; background: #fff;  179px; border: 1px solid #ccc;">
                            </div>
                        </div>
                        <button type="submit" class="btn btn-default">Submit</button>
                    </form>
    
                    <!-- 完成站内搜索 -->
                    <script type="text/javascript">
                        function overFn(obj) {
                            $(obj).css("background", "#DBEAF9");
                        }
                        function outFn(obj) {
                            $(obj).css("background", "#fff");
                        }
                        function clickFn(obj) {
                            $("#search").val($(obj).html());
                            $("#showDiv").css("display", "none");
                        }
    
                        function searchWord(obj) {
                            //1、 获得输入框的输入的内容
                            var word = $(obj).val();
                            //2、 根据输入框的内容去数据库中模糊查询---List<Product>
                            var content = "";
                            $
                                    .post(
                                            "${pageContext.request.contextPath}/searchWord",
                                            {
                                                "word" : word
                                            },
                                            function(data) {
                                                if (data.length > 0) {
                                                    for (var i = 0; i < data.length; i++) {
                                                        content += "<div style='padding:5px;cursor:pointer'onclick='clickFn(this)' onmouseover='overFn(this)'onmouseout='outFn(this)'>"
                                                                + data[i]
                                                                + "</div>";
                                                    }
                                                    $("#showDiv").html(content);
                                                    $("#showDiv").css("display",
                                                            "block");
                                                }
                                            }, "json");
                        }
                    </script>
                </div>
            </div>
        </nav>
    </div>

     7 filter配置文件

    <filter>
        <filter-name>AutoLoginFilter</filter-name>
        <filter-class>www.test.web.filter.AutoLoginFilter</filter-class>
      </filter>
      <filter-mapping>
        <filter-name>AutoLoginFilter</filter-name>
        <url-pattern>/*</url-pattern>
      </filter-mapping>
  • 相关阅读:
    手机储存卡被写保护怎样删掉
    EXT.NET复杂布局(四)——系统首页设计(下)
    排序算法——选择排序
    NET 程序员十种必备工具 目录
    三种序列化体式格式
    Limitations of SharePoint Web Services
    How to: Update List Items
    哄骗JQuery直接调用asp.net后台办法
    jquery Dialog 弹出窗插件
    EXT.NET高效开发(四)——实用技巧
  • 原文地址:https://www.cnblogs.com/jepson6669/p/8407230.html
Copyright © 2011-2022 走看看