복붙노트

[SPRING] 사용자 당 하나의 세션 만 허용

SPRING

사용자 당 하나의 세션 만 허용

Struts2, Spring & Hibernate를 사용하여 개발 된 웹 응용 프로그램이 있습니다.

응용 프로그램에는 한 사용자가 하나의 브라우저에서만 로그인 할 수있는 기능이 필요합니다.

사용자 x가 pc-1 브라우저 ff에 로그인되어 있으면 다른 곳에서 로그인 할 수 없다고합시다.

구현 세션 맵에 의해 시도하고 전역 맵에 세션을 저장하지만 사용자가 로그 오프하고 다시 로그인을 시도 할 때 실패합니다.

사용자가 로그 오프하지 않고 세션 시간 제한을 설정했지만지도가 지워지지 않으면 심각한 오류도 발생합니다.

이 기능을 구현하는 더 좋은 아이디어.

Google은 사용자가 로그인하는 것을 방해하고 싶지 않지만 사용자가 인증을 공유하고 동일한 로그인을 통해 여러 사용자가 로그인 할 수 있도록하여 응용 프로그램을 악용하지 못하도록합니다.

해결법

  1. ==============================

    1.이미 Spring을 사용하고 있으므로 Spring Security와 응용 프로그램을 통합 할 것을 권장합니다.

    이미 Spring을 사용하고 있으므로 Spring Security와 응용 프로그램을 통합 할 것을 권장합니다.

    스프링 보안을 통해 사용자 당 허용되는 최대 세션을 동시에 정의 할 수 있습니다.

    <session-management>
            <concurrency-control max-sessions="1" />
        </session-management>
    

    유효한 세션을 가진 사용자가 다시 로그인을 시도 할 때 설정되면 사용자에게 최대 동시 액세스가 1로 설정되었음을 알립니다.

    자세히보기.

    봄 보안 옵션이없는 경우 :

  2. ==============================

    2.로그인시 사용자 데이터와 함께 저장된 생성 된 ID / 쿠키 (세션 ID로 충분)를 사용자에게 제공하십시오. 사용자가 이전 ID / 쿠키로 서버에 요청을하면 다른 곳에 로그인했다고 말합니다.

    로그인시 사용자 데이터와 함께 저장된 생성 된 ID / 쿠키 (세션 ID로 충분)를 사용자에게 제공하십시오. 사용자가 이전 ID / 쿠키로 서버에 요청을하면 다른 곳에 로그인했다고 말합니다.

    새로운 로그인 시도를 금지하는 다른 방법은 단점을 가지고 있습니다.

  3. ==============================

    3.가장 좋은 해결책은 새 세션에서 로그인 할 때 다른 세션에서 사용자를 로그 오프하는 것입니다. 브라우저를 닫을 때 사용자가 로그 오프하지 않고 다른 창에 로그인하지 못하게하는 것이 종종 함정입니다.

    가장 좋은 해결책은 새 세션에서 로그인 할 때 다른 세션에서 사용자를 로그 오프하는 것입니다. 브라우저를 닫을 때 사용자가 로그 오프하지 않고 다른 창에 로그인하지 못하게하는 것이 종종 함정입니다.

    이전 사용 자 세션을 자동으로 닫는 것이 좋습니다. 정상적인 사용에서는 문제가 없지만 로그인과 암호를 공유 할 때 두 사람이 응용 프로그램과 동시에 작업 할 수 없기 때문입니다.

  4. ==============================

    4.지도를 만듭니다. 로깅 할 때 해당 사용자 ID가 해당 맵에 있는지 확인하십시오. 해당 사용자 ID가 없으면 로그 아웃 할 때 해당 사용자 ID를 제거하십시오.

    지도를 만듭니다. 로깅 할 때 해당 사용자 ID가 해당 맵에 있는지 확인하십시오. 해당 사용자 ID가 없으면 로그 아웃 할 때 해당 사용자 ID를 제거하십시오.

  5. ==============================

    5.솔직히 사용자를 단일 로그인으로 제한해야하는 이유를 다시 살펴 보겠습니다. 두 가지 다른 브라우저에서 로그인하는 것을 막을 수는 있지만 쉬운 방법은 없습니다. 제공되는 제안은 모두 작동 할 수 있습니다. 스프링 보안 옵션을 사용하면 구현하기가 가장 쉽습니다. 사용자가 동일한 탭에서 두 번째 탭을 열면 모두 중단됩니다. 브라우저. 이는 동일한 세션의 일부로 간주됩니다.

    솔직히 사용자를 단일 로그인으로 제한해야하는 이유를 다시 살펴 보겠습니다. 두 가지 다른 브라우저에서 로그인하는 것을 막을 수는 있지만 쉬운 방법은 없습니다. 제공되는 제안은 모두 작동 할 수 있습니다. 스프링 보안 옵션을 사용하면 구현하기가 가장 쉽습니다. 사용자가 동일한 탭에서 두 번째 탭을 열면 모두 중단됩니다. 브라우저. 이는 동일한 세션의 일부로 간주됩니다.

  6. ==============================

    6.Servlet 컨텍스트에서 사용자 스택을 유지하십시오. 웹 컨테이너 용입니다. 서블릿 컨텍스트에서 발견 된 사용자 이름이 로그인 페이지로 리디렉션되는 경우 사용자가 로그인하기 전에 점검을 수행하십시오.

    Servlet 컨텍스트에서 사용자 스택을 유지하십시오. 웹 컨테이너 용입니다. 서블릿 컨텍스트에서 발견 된 사용자 이름이 로그인 페이지로 리디렉션되는 경우 사용자가 로그인하기 전에 점검을 수행하십시오.

  7. from https://stackoverflow.com/questions/10782968/allow-only-one-session-per-user by cc-by-sa and MIT license