[SPRING] 사용자 당 하나의 세션 만 허용
SPRING사용자 당 하나의 세션 만 허용
Struts2, Spring & Hibernate를 사용하여 개발 된 웹 응용 프로그램이 있습니다.
응용 프로그램에는 한 사용자가 하나의 브라우저에서만 로그인 할 수있는 기능이 필요합니다.
사용자 x가 pc-1 브라우저 ff에 로그인되어 있으면 다른 곳에서 로그인 할 수 없다고합시다.
구현 세션 맵에 의해 시도하고 전역 맵에 세션을 저장하지만 사용자가 로그 오프하고 다시 로그인을 시도 할 때 실패합니다.
사용자가 로그 오프하지 않고 세션 시간 제한을 설정했지만지도가 지워지지 않으면 심각한 오류도 발생합니다.
이 기능을 구현하는 더 좋은 아이디어.
Google은 사용자가 로그인하는 것을 방해하고 싶지 않지만 사용자가 인증을 공유하고 동일한 로그인을 통해 여러 사용자가 로그인 할 수 있도록하여 응용 프로그램을 악용하지 못하도록합니다.
해결법
-
==============================
1.이미 Spring을 사용하고 있으므로 Spring Security와 응용 프로그램을 통합 할 것을 권장합니다.
이미 Spring을 사용하고 있으므로 Spring Security와 응용 프로그램을 통합 할 것을 권장합니다.
스프링 보안을 통해 사용자 당 허용되는 최대 세션을 동시에 정의 할 수 있습니다.
<session-management> <concurrency-control max-sessions="1" /> </session-management>
유효한 세션을 가진 사용자가 다시 로그인을 시도 할 때 설정되면 사용자에게 최대 동시 액세스가 1로 설정되었음을 알립니다.
자세히보기.
봄 보안 옵션이없는 경우 :
-
==============================
2.로그인시 사용자 데이터와 함께 저장된 생성 된 ID / 쿠키 (세션 ID로 충분)를 사용자에게 제공하십시오. 사용자가 이전 ID / 쿠키로 서버에 요청을하면 다른 곳에 로그인했다고 말합니다.
로그인시 사용자 데이터와 함께 저장된 생성 된 ID / 쿠키 (세션 ID로 충분)를 사용자에게 제공하십시오. 사용자가 이전 ID / 쿠키로 서버에 요청을하면 다른 곳에 로그인했다고 말합니다.
새로운 로그인 시도를 금지하는 다른 방법은 단점을 가지고 있습니다.
-
==============================
3.가장 좋은 해결책은 새 세션에서 로그인 할 때 다른 세션에서 사용자를 로그 오프하는 것입니다. 브라우저를 닫을 때 사용자가 로그 오프하지 않고 다른 창에 로그인하지 못하게하는 것이 종종 함정입니다.
가장 좋은 해결책은 새 세션에서 로그인 할 때 다른 세션에서 사용자를 로그 오프하는 것입니다. 브라우저를 닫을 때 사용자가 로그 오프하지 않고 다른 창에 로그인하지 못하게하는 것이 종종 함정입니다.
이전 사용 자 세션을 자동으로 닫는 것이 좋습니다. 정상적인 사용에서는 문제가 없지만 로그인과 암호를 공유 할 때 두 사람이 응용 프로그램과 동시에 작업 할 수 없기 때문입니다.
-
==============================
4.지도를 만듭니다. 로깅 할 때 해당 사용자 ID가 해당 맵에 있는지 확인하십시오. 해당 사용자 ID가 없으면 로그 아웃 할 때 해당 사용자 ID를 제거하십시오.
지도를 만듭니다. 로깅 할 때 해당 사용자 ID가 해당 맵에 있는지 확인하십시오. 해당 사용자 ID가 없으면 로그 아웃 할 때 해당 사용자 ID를 제거하십시오.
-
==============================
5.솔직히 사용자를 단일 로그인으로 제한해야하는 이유를 다시 살펴 보겠습니다. 두 가지 다른 브라우저에서 로그인하는 것을 막을 수는 있지만 쉬운 방법은 없습니다. 제공되는 제안은 모두 작동 할 수 있습니다. 스프링 보안 옵션을 사용하면 구현하기가 가장 쉽습니다. 사용자가 동일한 탭에서 두 번째 탭을 열면 모두 중단됩니다. 브라우저. 이는 동일한 세션의 일부로 간주됩니다.
솔직히 사용자를 단일 로그인으로 제한해야하는 이유를 다시 살펴 보겠습니다. 두 가지 다른 브라우저에서 로그인하는 것을 막을 수는 있지만 쉬운 방법은 없습니다. 제공되는 제안은 모두 작동 할 수 있습니다. 스프링 보안 옵션을 사용하면 구현하기가 가장 쉽습니다. 사용자가 동일한 탭에서 두 번째 탭을 열면 모두 중단됩니다. 브라우저. 이는 동일한 세션의 일부로 간주됩니다.
-
==============================
6.Servlet 컨텍스트에서 사용자 스택을 유지하십시오. 웹 컨테이너 용입니다. 서블릿 컨텍스트에서 발견 된 사용자 이름이 로그인 페이지로 리디렉션되는 경우 사용자가 로그인하기 전에 점검을 수행하십시오.
Servlet 컨텍스트에서 사용자 스택을 유지하십시오. 웹 컨테이너 용입니다. 서블릿 컨텍스트에서 발견 된 사용자 이름이 로그인 페이지로 리디렉션되는 경우 사용자가 로그인하기 전에 점검을 수행하십시오.
from https://stackoverflow.com/questions/10782968/allow-only-one-session-per-user by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] EclipseLink 2.0 및 Spring 3.0.5 및 Tomcat 6을 구성하는 방법은 무엇입니까? (0) | 2019.03.17 |
---|---|
[SPRING] Quartz 트리거를 데이터베이스에 유지하는 올바른 방법 (0) | 2019.03.17 |
[SPRING] Spring OpenSessionInViewInterceptor가 작동하지 않습니다. (0) | 2019.03.17 |
[SPRING] 요청 사이에 스프링이있는 상태 유지 (0) | 2019.03.17 |
[SPRING] 컨테이너 톰캣 서버에서 전개 된 (Spring Boot) 전쟁의 컨텍스트 경로 변경. 따라서 데모가 아닙니다.-0.01-SNAPSHOT (0) | 2019.03.17 |