JavaWeb에서 Session 및 Cookie를 사용하여 로그인 인증

6674 단어 javacookiesession
백그라운드 관리 페이지는 종종 로그인을 해야만 조작할 수 있는데, 이때 Seession이 로그인 상태를 기록해야 한다
구현하는 것도 매우 간단하다. Handler Interceptor 하나만 사용자 정의하면 된다
사용자 정의 Handler Interceptor도 몇 줄의 코드만 있습니다

public class LoginInterceptor implements HandlerInterceptor {

  @Override
  public void afterCompletion(HttpServletRequest request,
                HttpServletResponse response, Object obj, Exception err)
      throws Exception {
  }

  @Override
  public void postHandle(HttpServletRequest request, HttpServletResponse response,
              Object obj, ModelAndView mav) throws Exception {

  }

  @Override
  public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
               Object obj) throws Exception {
    // session 
    String str = (String) request.getSession().getAttribute("isLogin");
    // true, true controller 
    if(str!=null){
      return true;
    }
    // , false, controller 
    response.sendRedirect("/backend/loginPage");
    return false;
  }
}

Controller 코드

@Controller
@RequestMapping("/backend")
public class BackendController {

  @RequestMapping(value = "/loginPage", method = {RequestMethod.GET})
  public String loginPage(HttpServletRequest request,String account, String password){
    return "login";
  }

  @RequestMapping(value = "/login", method = {RequestMethod.POST})
  public String login(HttpServletRequest request,RedirectAttributes model, String account, String password){
    // , session , 
    if ("jack".equals(account)&&"jack2017".equals(password)){
      request.getSession().setAttribute("isLogin","yes");
      return "redirect:IndexPage";
    }else {
      // , , RedirectAttributes
      model.addFlashAttribute("error"," ");
      return "redirect:loginPage";
    }
  }
  // , 
  @RequestMapping(value = "/loginOut", method = {RequestMethod.GET})
  public String loginOut(HttpServletRequest request) {
    request.getSession().removeAttribute("isLogin");
    return "redirect:loginPage";
  }
  @RequestMapping(value = "/IndexPage", method = {RequestMethod.GET})
  public String IndexPage(HttpServletRequest request){
    return "Index";
  }

}

spring 설정

  <!-- -->

  <!--   -->
  <mvc:interceptors>
    <!--   -->
    <mvc:interceptor>
      <!-- -->
      <mvc:mapping path="/backend/**"/>
      <!-- -->
      <mvc:exclude-mapping path="/backend/loginPage"/>
      <mvc:exclude-mapping path="/backend/login"/>
      <bean class="com.ima.Interceptor.LoginInterceptor"></bean>
    </mvc:interceptor>
  </mvc:interceptors>

간단한 Session 구현 로그인 인증 시스템은 이렇게 완성됩니다. 로그인 상태에서 브라우저를 종료한 후에도 일정 시간 보류하려면 Session을 쿠키로 바꿀 수 있습니다
저희는 보통 쿠키를 사용하거든요.
쿠키랑 세션이랑 방법이 많이 안 맞아요.
쿠키 사용자 정의 HandlerInterceptor 사용

public class LoginInterceptor implements HandlerInterceptor {

  @Override
  public void afterCompletion(HttpServletRequest request,
                HttpServletResponse response, Object obj, Exception err)
      throws Exception {
  }

  @Override
  public void postHandle(HttpServletRequest request, HttpServletResponse response,
              Object obj, ModelAndView mav) throws Exception {

  }

  @Override
  public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
               Object obj) throws Exception {
//     request cookie
    Cookie[] cookies = request.getCookies();
    if (null==cookies) {
      System.out.println(" cookie==============");
    } else {
//       cookie true controller 
      for(Cookie cookie : cookies){
        if(cookie.getName().equals("isLogin")){
          return true;
        }
      }
    }
//     , false, controller 
    response.sendRedirect("/backend/loginPage");
    return false;
  }
}

컨트롤러의 변화도 크지 않아요.

@Controller
@RequestMapping("/backend")
public class BackendController {

  @RequestMapping(value = "/loginPage", method = {RequestMethod.GET})
  public String loginPage(HttpServletRequest request, String account, String password) {
    return "login";
  }

  @RequestMapping(value = "/login", method = {RequestMethod.POST})
  public String login(HttpServletRequest request, HttpServletResponse response, RedirectAttributes model, String account, String password) {
    if ("edehou".equals(account) && "aidou2017".equals(password)) {
      Cookie cookie = new Cookie("isLogin", "yes");
      cookie.setMaxAge(30 * 60);//  30min
      cookie.setPath("/");
      response.addCookie(cookie);
      return "redirect:IndexPage";
    } else {
      model.addFlashAttribute("error", " ");
      return "redirect:loginPage";
    }
  }

  @RequestMapping(value = "/logOut", method = {RequestMethod.GET})
  public String loginOut(HttpServletRequest request, HttpServletResponse response) {
    Cookie[] cookies = request.getCookies();
    for (Cookie cookie : cookies) {
      if (cookie.getName().equals("isLogin")) {
        cookie.setValue(null);
        cookie.setMaxAge(0);//  cookie
        cookie.setPath("/");
        response.addCookie(cookie);
        break;
      }
    }
    return "redirect:loginPage";
  }

  @RequestMapping(value = "/IndexPage", method = {RequestMethod.GET})
  public String IndexPage(HttpServletRequest request) {
    return "Index";
  }

}

스프링의 설정은 이전과 똑같다
주의하다
이것은 단지 시범일 뿐, 실제 프로젝트에서 쿠키의 키와 값은 특수 처리를 거쳐야 하며, 그렇지 않으면 안전 문제를 일으킬 수 있음을 건의합니다
이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.

좋은 웹페이지 즐겨찾기