程序员社区

【Servlet-1】Cookie实现10天内免登陆

设计一个登录页面login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="/31/LoginServlet">
用户名<input type="text" name="username"><br>
密码<input type="password" name="password"><br>
<input type="checkbox" name="tenDayAutoLogin" value="ok">十天内免登录 <br>
<input type="submit" value="登录">
</form>
</body>
</html>

登录LoginServlet.java文件:

package Cookie;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.*;

@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取用户名和密码
        request.setCharacterEncoding("UTF-8");
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        //jdbc链接数据库验证用户名和密码
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String realname=null;
        boolean loginSuccess=false;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn= DriverManager.getConnection("jdbc:mysql://localhost:3366/db1","root","123");
            String sql = "Select id,username,password,realname from t_user where username=? and password=?";
            ps=conn.prepareStatement(sql);
            ps.setString(1,username);
            ps.setString(2,password);
            rs=ps.executeQuery();
            if(rs.next()){
                loginSuccess=true;
                realname=rs.getString("realname");
            }
        } catch (SQLException | ClassNotFoundException e) {
            e.printStackTrace();
        }finally {
            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (ps != null) {
                try {
                    ps.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }

            if(loginSuccess){
                //登录成功以后,判断用户是否选择了10天内免登陆
                String tenDayAutoLogin = request.getParameter("tenDayAutoLogin");
                if("ok".equals(tenDayAutoLogin)){
                    //创建Co对象
                    Cookie cookie1 = new Cookie("username",username);
                    Cookie cookie2 = new Cookie("password",password);
                    //设置Cookie对象的有效时间
                    cookie1.setMaxAge(60*60*24*10);
                    cookie2.setMaxAge(60*60*24*10);
                    //设置关联路径
                    cookie1.setPath(request.getContextPath());
                    cookie2.setPath(request.getContextPath());
                    //发送Cookie给浏览器
                    response.addCookie(cookie1);
                    response.addCookie(cookie2);
                }
                //登录成功跳转到成功页面
                response.setContentType("text/html;charset=UTF-8");
                PrintWriter out = response.getWriter();
                out.print("<html>");
                out.print("<head>");
                out.print("<title>欢迎页面</title>");
                out.print("</head>");
                out.print("<body>");
                out.print("欢迎");
                out.print(realname);
                out.print("</body>");
                out.print("</html>");
            }else {
                //登录失败跳转到失败页面
                response.sendRedirect(request.getContextPath()+"/fail.html");
            }

        }
    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}

如果选择了十天内免登陆按钮,直接跳转到欢迎页面,欢迎页面是一个Servlet,Index.html文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
<!--欢迎页面直接跳转到Servlet,将Servlet直接设为欢迎页面-->
    <meta http-equiv="refresh" content="0;url=/31/CheckLoginStatusServlet">
    <title>Title</title>
</head>
<body>
</body>
</html>

欢迎页面的CheckLoginStatusServlet.java文件:

package Cookie;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.*;

@WebServlet("/CheckLoginStatusServlet")
public class CheckLoginStatusServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //从request中获取Cookie
        Cookie[] cookies = request.getCookies();
        String username=null;
        String password=null;
        if(cookies!=null){
            for(Cookie cookie:cookies){
                String cookieName = cookie.getName();
                String cookieValue = cookie.getValue();
                if("username".equals(cookieName)){
                    username=cookieValue;
                }else if("password".equals(cookieName)){
                    password=cookieValue;
                }
            }
        }
        if(username!=null&&password!=null){
            //链接数据库jdbc验证用户名和密码
            Connection conn = null;
            PreparedStatement ps = null;
            ResultSet rs = null;
            boolean loginSuccess=false;
            String realname=null;
            try {
                Class.forName("com.mysql.jdbc.Driver");
                conn= DriverManager.getConnection("jdbc:mysql://localhost:3366/db1","root","123");
                String sql = "Select id,username,password,realname from t_user where username=? and password=?";
                ps=conn.prepareStatement(sql);
                ps.setString(1,username);
                ps.setString(2,password);
                rs=ps.executeQuery();
                if(rs.next()){
                    loginSuccess=true;
                    realname=rs.getString("realname");
            }
            } catch (SQLException | ClassNotFoundException e) {
                e.printStackTrace();
            }finally {
                if (rs != null) {
                    try {
                        rs.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
                if (ps != null) {
                    try {
                        ps.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
                if (conn != null) {
                    try {
                        conn.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }

                if(loginSuccess){
                    //登录成功跳转到成功页面
                    response.setContentType("text/html;charset=UTF-8");
                    //登录成功跳转到成功页面
                    response.setContentType("text/html;charset=UTF-8");
                    PrintWriter out = response.getWriter();
                    out.print("<html>");
                    out.print("<head>");
                    out.print("<title>欢迎页面</title>");
                    out.print("</head>");
                    out.print("<body>");
                    out.print("欢迎");
                    out.print(realname);
                    out.print("</body>");
                    out.print("</html>");
                }else {
                    //登录失败跳转到失败页面
                    response.sendRedirect(request.getContextPath()+"/fail.html");
                }
            }

        }else{
            //跳转到登录页面
            response.sendRedirect(request.getContextPath()+"/login.html");
        }
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}

在这里插入图片描述

赞(0) 打赏
未经允许不得转载:IDEA激活码 » 【Servlet-1】Cookie实现10天内免登陆

相关推荐

  • 暂无文章

一个分享Java & Python知识的社区