JSP 개발 중 spring mvc 프로젝트 에서 로그 인 계 정 단일 브 라 우 저 로그 인 실현

JSP 개발 중 spring mvc 프로젝트 에서 로그 인 계 정 단일 브 라 우 저 로그 인 실현
많은 웹 제품 에서 같은 시간 에 하나의 계 정 만 허용 하고 하나의 브 라 우 저 에서 만 로그 인 할 수 있 도록 해 야 합 니 다.쉽게 말 하면 A 계좌번호 가...
브 라 우 저 1 에 로그 인 했 습 니 다.이때 브 라 우 저 2 에 A 계 정 을 로그 인 합 니 다.그러면 브 라 우 저 1 에 있 는 A 계 정 은 밀 려 나 고 사용자 가 브 라 우 저 1 페이지 를 조작 하면 페이지 는
로그 인 페이지 로 건 너 뛰 려 면 다시 로그 인 해 야 합 니 다.그렇다면 우 리 는 어떻게 이런 기능 을 실현 할 수 있 을 까?다음은 여러분 께 상세 한 소 개 를 드 리 겠 습 니 다.
의 원리
사용자 A 는 계 정 a 를 사용 하여 브 라 우 저 에 로그 인 한 다음 에 사용자 B 는 다른 컴퓨터 의 브 라 우 저 에서 계 정 a 를 로그 인 합 니 다.사용자 B 가 로그 인 인증 에 성공 하면 터치 합 니 다.
로그 인 감청 류 를 보 내 고 감청 류 에서 계 정 a 가 사용자 A 에 의 해 로그 인 되 었 다 고 판단 되면 사용자 A 의 계 정 a 를 차 버린다.이때 사용자 A 가 페이지 를 조작 하면 페이지 는 로그 인 페이지 로 이동한다.
코드 구현
실현 과정 에서 LoginListenner 감청 류,login 로그 인 방법 및 웹.xml 에 감청 류 를 설정 합 니 다.
LoginListenner
로그 인 에 성공 하면 session 에 로그 인 에 성공 한 계 정 대상 loginuser 를 넣 고 LoginListenner 의 attributeAdded 이 벤트 를 터치 합 니 다.이 이벤트 에서,
계 정과 session 의 대응 관 계 를 저장 하 는 map 에 현재 로그 인 한 계 정의 session 이 있 는 지 판단 합 니 다.있 으 면 이 session 을 map 에서 제거 하고 이 session 을 취소 한 다음 에 방금 로그 인 한 계 정과 session 을 map 에 넣 습 니 다.
다음은 코드:

/** 
 * 
 * @ClassName: LoginListenner 
 * @Description:      -           ,      
 * @author mr_smile2014 [email protected] 
 * @date 2014 11 12    2:23:41 
 * 
 */ 
public class LoginListenner implements HttpSessionAttributeListener { 
  /** 
   *        session     map 
   */ 
  private Map<String, HttpSession> map = new HashMap<String, HttpSession>(); 
 
  /** 
   *   session        
   */ 
  public void attributeAdded(HttpSessionBindingEvent event) { 
    String name = event.getName(); 
 
    if (name.equals("loginuser")) { 
      User user = (User) event.getValue(); 
      if (map.get(user.getUserName()) != null) { 
        HttpSession session = map.get(user.getUserName()); 
        session.removeAttribute(user.getUserName()); 
        session.invalidate(); 
      } 
      map.put(user.getUserName(), event.getSession()); 
    } 
 
  } 
  /** 
   *   session        
   */ 
  public void attributeRemoved(HttpSessionBindingEvent event) { 
    String name = event.getName(); 
 
    if (name.equals("loginuser")) { 
      User user = (User) event.getValue(); 
      map.remove(user.getUserName()); 
 
    } 
  } 
 
  public void attributeReplaced(HttpSessionBindingEvent event) { 
 
  } 
 
  public Map<String, HttpSession> getMap() { 
    return map; 
  } 
 
  public void setMap(Map<String, HttpSession> map) { 
    this.map = map; 
  } 
 
} 
로그 인 방법
계 정,비밀번호,인증 코드 를 판단 하고 검증 합 니 다.검증 이 통과 되면 해당 하 는 사용자 대상 을 session 에 넣 고 코드 는 다음 과 같 습 니 다.

/** 
   *    
   * 
   * @param userName 
   * @param passWord 
   * @param code 
   *          
   * @param type 
   *          (  ,   ) 
   * @param model 
   * @return 
   */ 
  @RequestMapping("/login") 
  public String login(String account, String passWord, String code, 
      Model model, HttpServletRequest request) { 
      //                
      User user=loginResult(userPhone, passWord, code, request); 
      //        session ,    LoginListenner  attributeAdded   
      request.getSession().setAttribute("loginuser", user); 
       
      } 
웹.xml 설정
LoginListenner 감청 류 를 웹.xml 파일 에 설정 해 야 session 감청 이 적 용 됩 니 다.설정 은 다음 과 같 습 니 다:

<!--              --> 
  <listener> 
    <listener-class>com.test.listenner.LoginListenner</listener-class> 
  </listener> 

읽 어 주 셔 서 감사합니다. 여러분 에 게 도움 이 되 기 를 바 랍 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기