Cookie之客户端十天免登录

2021-09-23  本文已影响0人  让你变好的过程从来都不会很舒服

需求

实现十天内免登陆的功能,当用户成功登陆后,十天内可以自动登录。用户名和密码直接写在代码中即可。

思路

用户登录成功之后将用户名和密码放到cookie中,当用户下次访问服务器时获取cookie中的用户名和密码与正确的用户名和密码做匹配,如果一致则直接登录成功。

解决

第一次登录时向浏览器响应表单数据,LoginServlet

package com.monkey1024.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 用户登录
 */
public class LoginServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        request.setCharacterEncoding("UTF-8");

        String userName = "";
        String password = "";
        //得到客户端保存的Cookie数据
        Cookie[] cookies = request.getCookies();
        for (int i = 0;cookies!=null && i < cookies.length; i++) {
            if("userName".equals(cookies[i].getName())){
                userName = cookies[i].getValue();
            }
            if("password".equals(cookies[i].getName())){
                password = cookies[i].getValue();
            }
        }

        //与cookie中的用户名和密码做匹配
        if("admin".equals(userName) && "123456".equals(password)){
            out.write("登录成功!");
        }else{
            out.write("<form action='/servlet/doLogin' method='post'>");
            out.write("用户名:<input type='text' name='userName' /><br/>");
            out.write("密码:<input type='password' name='password'/><br/>");
            out.write("<input type='checkbox' name='remember' />十天免登陆<br/>");
            out.write("<input type='submit' value='登录'/><br/>");
            out.write("</form>");

        }


    }

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

}

登录成功后将用户名和密码放入cookie中:

package com.monkey1024.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 登录
 */
public class DoLoginServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        //获取表单数据
        String userName = request.getParameter("userName");
        String password = request.getParameter("password");
        String remember = request.getParameter("remember");

        Cookie cookie1 = new Cookie("userName", userName);
        Cookie cookie2 = new Cookie("password", password);
        cookie1.setPath("/");
        cookie2.setPath("/");
        if("admin".equals(userName)&&"123456".equals(password)){
            if(remember!=null){
                cookie1.setMaxAge(60 * 60 * 240);//设置Cookie的有效保存时间为十天
                cookie2.setMaxAge(60 * 60 * 240);
                response.addCookie(cookie1);//将Cookie写回到客户端
                response.addCookie(cookie2);
            }
            out.write("登录成功!");
        }else{
            out.write("登录失败!");
            //设置2秒跳到重新登录
            response.setHeader("refresh", "2;url=/servlet/login");
        }

    }

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

}
上一篇下一篇

猜你喜欢

热点阅读