java verifies that the user is logged in to java for automatic login

  • 2020-05-09 18:34:44
  • OfStack

This article shares the detailed code of java to verify whether the user has logged in and to realize automatic login for your reference. The specific content is as follows

1. Verify whether the user has logged in


package cn.hongxin.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.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

 

public class LoginFilter implements Filter{

  public void init(FilterConfig filterConfig) throws ServletException {

  }

  public void doFilter(ServletRequest request, ServletResponse response,

      FilterChain chain) throws IOException, ServletException {

    // will request Equivalent to htt...

    HttpServletRequest req = (HttpServletRequest) request;

    // To obtain session

    HttpSession ss = req.getSession();

    // from session To derive user

    if(ss.getAttribute("user")==null){

      System.err.println(" You haven't logged in yet ");

      req.getSession().setAttribute("msg", " Please log in first ");

      // Redirect to login 

      HttpServletResponse resp = (HttpServletResponse) response;

      resp.sendRedirect(req.getContextPath()+"/index.jsp");[W2] 

    }else{

      // release 

      chain.doFilter(request, response);

    }

  }

  public void destroy() {

  }

}

Configure to web.xml and consider jsps/* :


<filter>

  <filter-name>login</filter-name>

  <filter-class>cn.itcast.filter.LoginFilter</filter-class>

 </filter>

 <filter-mapping>

  <filter-name>login</filter-name>

  <url-pattern>/jsps/*</url-pattern>

  <url-pattern>/views/*</url-pattern>

 </filter-mapping>

2. Realize automatic login to  

Automatic login is to help users use the page multiple times without having to enter their username and password again.

The user saves the user's login information, the person, to a local file called Cookie.

At the time of statement of   Name,value, new Cookie(key,value);

  Path               - the default value is the path where cookie is currently saved, serlvet.

If Cookie in this path: http: / / loclhost: 8080 / project/abc/AServlet, Cookie path as: http: / / loclhost project/abc

  explains:

Place in http: / / loclhost/project/abc directory servlet can read the cookie values.

If:

Save Cookie class: http: / / loclhost: 8080 / project/a/b/AServlet, Cookie default path as; http: / / loclhost project/a/b

Step 1: develop a login page


<c:choose>

  <c:when test="${empty sessionScope.name}">

    <form name="x" method="post" action="<c:url value='/LoginServlet'/>">

      Name:<input type="text" name="name"/><br/>

      auto:

      <input type="radio" name="auto" value="-1"> No automatic login 

      <br/>

      <input type="radio" name="auto" value="1">1 day <br/>

      <input type="radio" name="auto" value="7">1 weeks <br/>

      <input type="submit"/>

    </form>

  </c:when>

  <c:otherwise>

     You're logged in :${name}<br/>

    <a href="<c:url value='/LoginServlet'/>"> exit </a>

  </c:otherwise>

</c:choose>

Step 2: successfully save cookie


  public void doPost(HttpServletRequest request, HttpServletResponse response)

      throws ServletException, IOException {

    // Receive user name 

    String name = request.getParameter("name");

    String auto = request.getParameter("auto");

    // Put the user information in session

    request.getSession().setAttribute("name",name);

    // judge auto Whether it is -1

    if(!auto.equals("-1")){

      int day = Integer.parseInt(auto);//1|7

      int seconds = 60*60*24*day;

      // The statement cookie

      Cookie c = new Cookie("autoLogin",name);

      c.setMaxAge(seconds);

      c.setPath(request.getContextPath());

      // save cookie

      response.addCookie(c);

     

    }

  }

 

Step 3: request to visit any page in the site should be automatically logged in

Write a filter to override all url=/*. Read all cookie in doFilter. Is there a name cookie with the name autoLogin?

Always let go.

 


public void doFilter(ServletRequest request, ServletResponse response,

      FilterChain chain) throws IOException, ServletException {

    // Read here cookie

    HttpServletRequest req = (HttpServletRequest) request;

    // Get what you have cookie

    Cookie[] cs = req.getCookies();

    if(cs!=null){

      for(Cookie c:cs){

       if(c.getName().equals("autoLogin")){// If there is an automatic login cookie

         String value = c.getValue();// The user name 

         // Login is successful 

         req.getSession().setAttribute("name", value);

         break;

       }

      }

    }

    // Whether it is automatically logged in or not 

    chain.doFilter(request, response);

  }

Step 4: configure to web.xml for all url=/*


<filter>

  <filter-name>auto</filter-name>

  <filter-class>cn.itcast.filter.AutoFilter</filter-class>

 </filter>

 <filter-mapping>

  <filter-name>auto</filter-name>

  <url-pattern>/*</url-pattern>

 </filter-mapping>

  step 5: development exit


System.err.println(" User exit ");

    // Delete the entire session

    request.getSession().invalidate();

    Cookie c = new Cookie("autoLogin", "ddd");

    c.setMaxAge(0);

    c.setPath(request.getContextPath());

    response.addCookie(c);

//   request.getSession().removeAttribute("name");

    response.sendRedirect(request.getContextPath()+"/index.jsp");

Step 6: optimize the code

      because the user will enter AutoFiilter doFilter method when manually logging in, and read all Cookie once. This traversal is redundant for the user.

      so LoginServet url should be overdone in doFiler.

      and there is no automatic login for logouts.

The above is the entire content of this article, I hope to help you with your study.


Related articles: