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>
읽 어 주 셔 서 감사합니다. 여러분 에 게 도움 이 되 기 를 바 랍 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
VScode에서 MVN, Tomcat, JSP/Servlet에서 웹 앱 개발 메모Java와 maven 설치 ( ) 플러그인을 VScode에 설치 Tomcat DL ( ) ※ 환경에 따라 Tomcat 버전을 선택하십시오 Tomcat을 DL하면 zip을 압축 해제하고 모든 디렉토리에 넣습니다. ma...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.