쿠키 기반 필 터 를 사용 하여 고객 이 방문 할 때마다 한 번 만 로그 인 할 수 있 습 니 다.

12767 단어 cookie필터로그 인
여러분 이 각 사이트 에서 만 날 수 있 을 것 이 라 고 믿 습 니 다.로그 인 할 때 로그 인 상자 에 다음 로그 인 면제/한 달 로그 인 면제 와 유사 한 옵션 이 나타 납 니 다.본 고 는 어떻게 실현 하 는 지 설명 하 는 것 입 니 다.이 기록 을 하 는 것 도 비망록 모음 집 을 만 드 는 것 이 라 고 할 수 있 습 니 다.만약 에 글 에 잘못 이 있 으 면 여러분 이 지적 해 주신 것 을 환영 합 니 다.
왜 한 번 로그 인 을 한다 고 하 죠?한 페이지 를 방문 할 때 첫 번 째 자동 로그 인 에 실 패 했 을 때 다음 에 방문 을 새로 고 칠 때 자동 로그 인 절 차 를 다시 걸 으 면 순환 이 되 기 때 문 입 니 다.
본 고 는 코드 예시 프레임 워 크 가 Spring MVC 인 데 이 기능 을 실현 하려 면 어떤 지식 을 습득 해 야 하 는 지 설명 한다.cookies 와 필터
1.cookies
쿠키:쿠키 는 웹 프로그램 에 사용자 관련 정 보 를 저장 하 는 데 유용 한 방법 을 제공 합 니 다.예 를 들 어 사용자 가 사이트 에 방문 할 때 쿠키 를 이용 하여 사용자 의 첫 번 째 옵션 이나 다른 정 보 를 저장 할 수 있 습 니 다.그러면 사용자 가 다음 에 사이트 에 다시 방문 할 때 프로그램 은 이전에 저 장 된 정 보 를 검색 할 수 있 습 니 다.
쿠키 를 어떻게 저장 하고 쿠키 를 어떻게 삭제 하 는 지 살 펴 보 겠 습 니 다.
쿠키 저장

String newUserName = null;
try {
  newUserName = URLEncoder.encode(username, "UTF-8");//      ,        ,cookies         
} catch (UnsupportedEncodingException e) {
  e.printStackTrace();
}
Cookie nameCookie = new Cookie("username", newUserName);
String pwdMd5Cook = MD5Util.MD5(Pwd);
Cookie pwdCookie = new Cookie("pwd", pwdMd5Cook);//         
nameCookie.setMaxAge(60 * 60 * 24 * 365);//        
pwdCookie.setMaxAge(60 * 60 * 24 * 30);//     30 
//   Cookie      
response.addCookie(nameCookie);
response.addCookie(pwdCookie);
cookies 를 삭제 하고 삭제 하 는 것 은 간단 하지만 주의해 야 할 때 cookies 를 삭제 하고 cookies 를 저장 하 는 것 과 같은 제어 층 에 있어 야 합 니 다.그렇지 않 으 면 저 장 된 cookies 를 찾 지 못 해서 삭제 할 수 없습니다.

Cookie cookie = new Cookie("pwd", null);
cookie.setMaxAge(0);//     cookie
response.addCookie(cookie);
2.Filter-필터
Filter 는 필터 라 고도 부 릅 니 다.Servlet 기술 에서 가장 실 용적 인 기술 입 니 다.웹 개발 자 는 Filter 기술 을 통 해 웹 서버 가 관리 하 는 모든 웹 자원,예 를 들 어 Jsp,Servlet,정적 이미지 파일 이나 정적 html 파일 등 을 차단 하여 특수 한 기능 을 실현 합 니 다.예 를 들 어 URL 등급 의 권한 접근 제어,민감 한 어 휘 를 걸 러 내 고 응답 정 보 를 압축 하 는 등 고급 기능 을 실현 합 니 다.
실현 방법:Filter 인 터 페 이 스 를 계승 하고 doFilter 방법 을 실현 합 니 다.웹.xml 파일 에 작 성 된 filter 류 를 등록 하고 차단 할 수 있 는 자원 을 설정 합 니 다.

<filter>       。
<filter-name>            ,          。
<filter-class>                 。
<init-param>               ,     <param-name>       ,<param-value>      。
     ,    FilterConfig            。
<filter-mapping>         Filter         。  Filter               :Servlet             
<filter-name>       filter     。      <filter>             
<url-pattern>   filter         (      URL  )
<servlet-name>         Servlet  。
<filter>
  <filter-name>suicaiFilter</filter-name>
  <filter-class>com.suicai.filter.suicaiFilter</filter-class>
</filter>
<filter-mapping>
  <filter-name>suicaiFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>
다음은 실제 응용 코드 를 살 펴 보 겠 습 니 다.

public class suicaiFilter implements Filter {
  @Override
  public void destroy() {
  }
  @Override
  public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {
    HttpServletRequest req=(HttpServletRequest)request;
    HttpServletResponse res=(HttpServletResponse)response;
    HttpSession session = req.getSession();
    String requestURI = req.getRequestURI();
    String param = req.getQueryString();
    String url = req.getServletPath();
    if(param!=null){
      url = url+"?"+param;
    }
    if(requestURI.contains("js") || requestURI.contains("css") || requestURI.contains("images")){
      //   css,js,images     
      chain.doFilter(request, response);
    }else if(requestURI.contains("/info/")||requestURI.contains("/gys/")){
      //        ,       (     ),      ,          ,         ,       
      ProviderInfo providerInfo = (ProviderInfo) session.getAttribute("providerInfo_gys");
      String IsAutomaticLogin = (String) session.getAttribute("IsAutomaticLogin");//              
      if(requestURI.contains("/info/") && !requestURI.contains("/login")){
        //             (    ),       ,     ,     
        if(providerInfo==null && IsAutomaticLogin == null){
          req.getSession().setAttribute("goURL", url);
          res.sendRedirect(req.getContextPath() + "/common/automaticLogin");
        }else if(providerInfo==null && IsAutomaticLogin != null ){
          chain.doFilter(request, response);
        }else{
          chain.doFilter(request, response);
        }
      }else if(requestURI.contains("/gys/")){//      ,     ,          
        if(providerInfo==null && IsAutomaticLogin == null){
          req.getSession().setAttribute("goURL", url);
          res.sendRedirect(req.getContextPath() + "/common/automaticLogin");
        }else if(providerInfo==null && IsAutomaticLogin != null ){
          session.setAttribute("redirectUrl", url);
          res.sendRedirect(req.getContextPath() + "/login.jsp?redirectUrl="+url);
        }else{
          chain.doFilter(request, response);
        }
      }else{
        chain.doFilter(request, response);
      }
    }else{
      //   
      chain.doFilter(request, response);
    }
  }
  @Override
  public void init(FilterConfig arg0) throws ServletException {
  }
}
코드 에서 알 수 있 듯 이 자동 으로 로그 인 했 는 지 여부(IsAutomatic Login)가 필요 합 니 다.이 표 지 는 자동 으로 로그 인 할 때(성공 하 든 안 하 든)저 장 됩 니 다.
3.위 와 결합 하여 지식 을 제공 하고 아래 는 전체 코드 를 보 여 줍 니 다.잘못된 부분 을 발견 하면 여러분 의 지적 을 환영 합 니 다.

@Controller
@RequestMapping("/common")
public class CommonController{
  /**
   *       
   * @param request
   * @param response
   * @param username
   * @param pwd
   * @param ProviderInfo        model
   * @return
   */
  @RequestMapping("/automaticLogin")
  public String automaticLogin(HttpServletRequest request,ServletResponse response,@CookieValue(value = "username", required = false) String username,@CookieValue(value = "pwd", required = false) String pwd,ProviderInfo ProviderInfo) {
    //           
    String goURL = (String) session.getAttribute("goURL");
    if (username == null) {//cookies      ,         
      session.setAttribute("IsAutomaticLogin", "0");
      return "redirect:" + goURL;
    } else {
      try {
        username = URLDecoder.decode(username, "UTF-8");//  ,    
      } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
      }
    }
    // cookie   session    ,     ,          cookie 
    if ("".equals(username) || username == null) {//   session    ,       ,        
      session.setAttribute("IsAutomaticLogin", "0");
      return "redirect:" + goURL;
    } else {
      // cookie     ,  session    ,    ,      ,     ,  ,            (  cookie     )
      if ("".equals(pwd) || pwd == null) {
        ProviderInfo customer1 = (ProviderInfo) session.getAttribute("providerInfo_gys");
        if (customer1 == null) {//   session    ,       ,        
          session.setAttribute("IsAutomaticLogin", "0");
          return "redirect:" + goURL;
        } else {
          //     ,        
          return "redirect:" + goURL;
        }
      } else {
        // cookie    ,  session    ,    ,      ,     ,      
        ProviderInfo customer1 = (ProviderInfo) session.getAttribute("providerInfo_gys");
        if (customer1 == null) {//       ,  cookies            
          //         ,           
          ProviderInfo customer3 = ValidateDate(username);
          customer3.setPwd(pwd);
          customer3.setAccountType(6);
          ProviderInfo customer2 = infoService.login(customer3);//      
          if (customer2 == null) {//       ,        
            session.setAttribute("IsAutomaticLogin", "0");
            return "redirect:" + goURL;
          } else {
            //            session
            session.setAttribute("providerInfo_gys",customer2);
            return "redirect:" + goURL;
          }
        } else {
          return "redirect:" + goURL;
        }
      }
    }
  }
  /**
   *     
   * @param request
   * @param response
   * @param cus
   * @return
   */
  @RequestMapping("/UserLogin")
  @ResponseBody
  public Map<String, Object> goLogin(HttpServletRequest request,HttpServletResponse response,@ModelAttribute("ProviderInfo") ProviderInfo cus) {
    /*        */
    cus.setPwd(MD5Util.MD5(Pwd));
    ProviderInfo providerInfo = infoService.login(cus);
    Map<String, Cookie> cookieMap = new HashMap<String, Cookie>();
    if (providerInfo == null) {
      //     ,         
      map.put("error", "    ");
      return map;
    }else{
      String newUserName = null;
      if (remember_me.equals("1")) {//          
        try {
          newUserName = URLEncoder.encode(username, "UTF-8");
        } catch (UnsupportedEncodingException e) {
          e.printStackTrace();
        }
        Cookie nameCookie = new Cookie("username", newUserName);
        String pwdMd5Cook = MD5Util.MD5(Pwd);
        Cookie pwdCookie = new Cookie("pwd", pwdMd5Cook);//         +"create"
        nameCookie.setMaxAge(60 * 60 * 24 * 365);//        
        pwdCookie.setMaxAge(60 * 60 * 24 * 30);//     30 
        //   Cookie      
        response.addCookie(nameCookie);
        response.addCookie(pwdCookie);
        session.setAttribute("IsAutomaticLogin",null);
      }else{//    ,                  
        Cookie[] cookies = request.getCookies();
        if (null != cookies) {
          for (Cookie cookie : cookies) {
            cookieMap.put(cookie.getName(), cookie);
          }
        }
        if (cookies != null) {
          for (int i = 0; i < cookies.length; i++) {
            if (cookieMap.containsKey("pwd")) {
              Cookie cookie = new Cookie("pwd", null);
              cookie.setMaxAge(0);//     cookie
              response.addCookie(cookie);
            }
          }
        }
      }
      //     ,    user  ,       session
      map.put("ProviderInfo", providerInfo);
      map.put("goURL", session.getAttribute("goURL"));
      session.setAttribute("providerInfo_gys", providerInfo);
      return map;
    }else {
      map.put("error", "         ");
      return map;
    }
  }
  /**
   *   
   * @return
   */
  @RequestMapping("/logout")
  public String logout(HttpServletResponse response) {
    Map<String, Cookie> cookieMap = new HashMap<String, Cookie>();
    Cookie[] cookies = request.getCookies();
    if (null != cookies) {
      for (Cookie cookie : cookies) {
        cookieMap.put(cookie.getName(), cookie);
      }
    }
    if (cookies != null) {
      for (int i = 0; i < cookies.length; i++) {
        if (cookieMap.containsKey("pwd")) {
          Cookie cookie = new Cookie("pwd", null);
          cookie.setMaxAge(0);//     cookie
          response.addCookie(cookie);
        }
      }
    }
    session.setAttribute("providerInfo_gys", null);
    return "/index";
  }
}
위 에서 설명 한 것 은 쿠키 를 기반 으로 필 터 를 사용 하여 고객 이 매번 방문 할 때마다 한 번 만 로그 인 할 수 있 도록 하 는 것 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.편집장 은 신속하게 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기