복붙노트

[SPRING] 스프링 보안 세션을 무효화할 수 있습니까?

SPRING

스프링 보안 세션을 무효화할 수 있습니까?

Tomcat 6.0.32, Spring Security 3.0.5를 사용하고 있습니다.

내 웹 응용 프로그램에서 일부 사용자는 다른 사용자 권한을 변경할 수 있습니다. 이 경우 권한이 변경된 사용자에 대한 세션을 무효화하고 싶습니다. 이것이 가능한가? 그렇다면 어떻게 될까?

해결법

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

    1.HttpSession에 액세스하는 유일한 방법은 HttpServletRequest 객체를 사용하기 때문에 컨테이너 관련 API를 사용하지 않고도 사용자 세션을 즉시 무효화 할 수는 없습니다.

    HttpSession에 액세스하는 유일한 방법은 HttpServletRequest 객체를 사용하기 때문에 컨테이너 관련 API를 사용하지 않고도 사용자 세션을 즉시 무효화 할 수는 없습니다.

    대신 메모리 내 저장소에 사용자 이름을 캐시하고 필터 또는 사용자 지정 AccessDecisionVoter에서 사용자 이름을 참조 할 수 있습니다. 사용자 테이블에 플래그를 사용하는 것은 좋은 생각이 아닙니다. 플래그는 본질적으로 일시적이므로 (서버를 다시 시작한 후에는 관계가 없습니다) 모든 요청에 ​​대해 데이터베이스 쿼리의 성능 저하를 피하는 것이 좋습니다.

    이런 종류의 일에 유권자를 사용하는 것에 관한 블로그 기사가 있습니다. 구식이지만 일반적인 접근 방식은 건전합니다.

    또 다른 접근법은 세션 관리 기능의 일부인 Spring Security의 SessionRegistry를 사용하는 것입니다. 일반적으로이 값은 사용자가 가질 수있는 세션 수를 제한하는 데 사용되지만 현재 인증 된 사용자를 나열하거나 만료시 세션을 표시하는 데 사용할 수도 있습니다.

    또한 사용자의 권한을 완전히 로깅하지 않고 다시로드하는 것이 좋습니다.

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

    2.나는 이것이 당신이 필요로하는 것이라고 믿습니다 - 로그인 한 사용자의 목록을 얻고 필요하지 않은 사람들의 세션을 무효로 만듭니다.

    나는 이것이 당신이 필요로하는 것이라고 믿습니다 - 로그인 한 사용자의 목록을 얻고 필요하지 않은 사람들의 세션을 무효로 만듭니다.

    http://static.springsource.org/spring-security/site/docs/3.1.x/reference/session-mgmt.html#list-authenticated-principals

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

    3.여러 서버에서 앱을 실행한다고 가정하면 모든 서버에서이를 수행 할 수있는 방법이 필요합니다.

    여러 서버에서 앱을 실행한다고 가정하면 모든 서버에서이를 수행 할 수있는 방법이 필요합니다.

    이 필터는 스프링 보안 필터를 따라야합니다.

    여러 서버에서 앱을 실행하지 않는 경우 SessionRegistry를 사용할 수 있습니다.

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

    4.HTTPSession 객체에는 무효화 메소드가 있습니다. 사용자가 일부 권한을 변경하면 현재 세션에 대해 무효화하고 다시로드하기 위해이 메소드를 호출해야합니다.

    HTTPSession 객체에는 무효화 메소드가 있습니다. 사용자가 일부 권한을 변경하면 현재 세션에 대해 무효화하고 다시로드하기 위해이 메소드를 호출해야합니다.

  5. from https://stackoverflow.com/questions/8478188/is-it-possible-to-invalidate-a-spring-security-session by cc-by-sa and MIT license