Automatic login function implementation

  1. automatic logon
    After the user logs in, he / she will enter the home page. After the browser is closed, the next time he / she opens the browser to enter the home page, he / she often needs to log in again. The automatic login function: when he / she opens the browser again, he / she can enter the home page without logging in again.
  2. Realization principle
    After the user logs in, the user's user name and password are saved in the cookie and sent to the browser. The next time the browser visits, it will bring back the contents of the cookie. The server will distinguish the user name and password from the cookie for verification. If the verification passes, it is allowed to enter the first page, etc., so as to achieve the purpose of automatic login.
  3. code implementation
    (1) Login page form:
<form method="post" action="login">
    //User name: < input type="text" name="username" ><br>
    //Password: < input type="text" name="password" ><br>
    //Auto login: < input type="checkbox" name="auto" value="auto" ><br>
    <input type="submit"  value="Sign in">
</form>
(2) To simulate the background service login method:
package com.service;

public class LoginServiceImpl {

    public boolean login(String username,String password) {
        return "root".equals(username)&&"1234".equals(password);
    } 

}

(3) Background Controller:

package com.controller;

import java.io.IOException;

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 com.service.LoginServiceImpl;

@WebServlet("/login")
public class LoginController extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        String username = req.getParameter("username");
        String password = req.getParameter("password");
        String auto = req.getParameter("auto"); //Auto login or not

        if(new LoginServiceImpl().login(username, password)) {//If login is successful
            req.getSession().setAttribute("username", username);
            if(auto==null) {
                Cookie cookie = new Cookie("auto", null);
                cookie.setMaxAge(60*60*24);//cookie effective time
                cookie.setPath(req.getContextPath()+"/");
                resp.addCookie(cookie);
            }else {
                Cookie cookie = new Cookie("auto", username+"_"+password);
                cookie.setMaxAge(60*60*24);//cookie effective time
                cookie.setPath(req.getContextPath()+"/");
                resp.addCookie(cookie);
            }
            resp.sendRedirect("index.jsp");
        }else {
            resp.sendRedirect("login.jsp");
        }
    }
}
(4) Interceptor
package com.filter;

import java.io.IOException;

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.annotation.WebFilter;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.service.LoginServiceImpl;
import com.util.CookieUitl;

@WebFilter("/*")
public class LoginFiler implements Filter {

    @Override
    public void destroy() {
    }

    @Override
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
            throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) resp;

        if(request.getRequestURI().contains("login")) {//If you visit login
            chain.doFilter(request, response);
            return;
        }else {
            String username = (String) request.getSession().getAttribute("username");
            if(username==null) {
                String val = CookieUitl.getCookieValByKey("auto", request);
                if(val!= null&& !val.equals("")) {
                    String name = val.split("_")[0];
                    String pass = val.split("_")[1];

                    if(new LoginServiceImpl().login(name, pass)) {
                        request.getSession().setAttribute("username", name);
                        chain.doFilter(request, response);
                        return;
                    }else {
                        response.sendRedirect("login.jsp");
                    }
                }else {
                    response.sendRedirect("login.jsp");
                }
            }else {
                chain.doFilter(request, response);
                return;
            }
        }
    }

    @Override
    public void init(FilterConfig arg0) throws ServletException {
    }
}

(5)CookieUtil

package com.util;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;

public class CookieUitl {

    public static String getCookieValByKey(String key,HttpServletRequest request) {

        String value = null;
        Cookie[] cookies = request.getCookies();
        if(cookies!= null && cookies.length>0) {
            for (Cookie cookie : cookies) {
                if(key.equals(cookie.getName())){
                    value = cookie.getValue();
                }
            }
        }
        return value;
    }
}
(6) Welcome page in index.jsp   
<body>
Welcome: ${username}
</body>

Note: in the actual development, the user name and password are not put in the cookie in clear text, and they need to be encrypted before being stored in the cookie.

Keywords: JSP Java

Added by gsaldutti on Thu, 02 Apr 2020 13:34:39 +0300