java 사용자 자동 로그인 실현

자동 로그인은 사용자가 이 웹 페이지를 여러 번 사용할 때 사용자 이름과 비밀번호를 다시 입력하지 않아도 로그인할 수 있도록 돕기 위한 것이다.
자동 로그인이란 사용자가 사용자의 로그인 정보, 사람, 로컬 파일에 저장하는 쿠키를 말한다.
Name,value - 선언할 때 new Cookie(key,value); 
Path - 기본값, 즉 현재 쿠키를 저장하는 이 serlvet가 있는 경로입니다.
만약 쿠키가 이런 경로에 있다면:http://loclhost:8080/project/abc/AServlet
쿠키의 경로는 다음과 같습니다.http://loclhost/project/abc
설명:
에 있다http://loclhost/project/abc디렉터리에 있는 servlet에서만 이 쿠키의 값을 읽을 수 있습니다. 
하면, 만약, 만약...
쿠키 클래스 저장:http://loclhost:8080/project/a/b/AServlet
쿠키의 기본 path는 다음과 같습니다.http://loclhost/project/a/b
1단계: 로그인 페이지 개발

<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"> 

      <br/>

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

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

      <input type="submit"/>

    </form>

  </c:when>

  <c:otherwise>

     :${name}<br/>

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

  </c:otherwise>

</c:choose>
2단계: 쿠키 저장 성공

public void doPost(HttpServletRequest request, HttpServletResponse response)

      throws ServletException, IOException {

    // 

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

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

    // session

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

    // auto -1

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

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

      int seconds = 60*60*24*day;

      // cookie

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

      c.setMaxAge(seconds);

      c.setPath(request.getContextPath());

      // cookie

      response.addCookie(c);

     

    }

  }

3단계: 이 사이트의 모든 페이지에 접근할 때 자동 로그인을 해야 합니다
모든 URL=/*에 대해 과도기를 작성합니다.doFilter에서 모든 쿠키를 읽습니다.autoLogin이라는 이름의 쿠키가 존재하는지 여부입니다.
영원히 놓아주다.

public void doFilter(ServletRequest request, ServletResponse response,

      FilterChain chain) throws IOException, ServletException {

    // cookie

    HttpServletRequest req = (HttpServletRequest) request;

    // cookie

    Cookie[] cs = req.getCookies();

    if(cs!=null){

      for(Cookie c:cs){

       if(c.getName().equals("autoLogin")){// cookie

         String value = c.getValue();// 

         // 

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

         break;

       }

      }

    }

    // 

    chain.doFilter(request, response);

  }
네 번째 섭: 웹으로 설정합니다.xml에서 모든 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>
5단계: 개발 종료

System.err.println(" ");

    // 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");

6단계: 코드 최적화
사용자가 수동으로 로그인할 때 AutoFiilter의 doFilter 방법에 들어가서 모든 쿠키를 한 번씩 읽습니다.이번 반복은 사용자에게 쓸데없는 것이다.
그래서 Login Servet이라는 URL을 doFiler에서 지나치게 고려해야 합니다.
종료에 대해서도 자동으로 로그인할 수 없습니다.
추가 정보:
사용자가 로그인했는지 확인

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 {

    // request htt...

    HttpServletRequest req = (HttpServletRequest) request;

    // session

    HttpSession ss = req.getSession();

    // session user

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

      System.err.println(" ");

      req.getSession().setAttribute("msg", " ");

      // 

      HttpServletResponse resp = (HttpServletResponse) response;

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

    }else{

      // 

      chain.doFilter(request, response);

    }

  }

  public void destroy() {

  }

}
웹으로 설정합니다.xml에서 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>

이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되기를 바랍니다.

좋은 웹페이지 즐겨찾기