복붙노트

[REDIS] 봄 세션 데이터 레디 스 - 유효한 세션, 레디 스 스토어에서 현재 사용자 가져 오기

REDIS

봄 세션 데이터 레디 스 - 유효한 세션, 레디 스 스토어에서 현재 사용자 가져 오기

분산 웹 응용 프로그램이 가능하다 RedisOperationSessionRepository를 사용하여 레디 스 스토어에서 유효한 세션을 얻을에 내 질문이다. (내가 그것을 읽고 나중에 다음 레디 스 저장소로 퍼팅에 대한 명시 적 코드를 작성하고 싶지 않은 말은, 프레임 워크 또는 것을 제공하는 라이브러리를 봄 - 데이터 - 레디 스 경우 이해 할).

나는 봄 레디 스 세션이 여전히 유효한 경우 (이 레디 스에 의해 뒷받침 될 때) 로그인을 보존 또한 세션과 서버가 재시작을 복원 할 수 있다는 것을 알고있다

내가 찾고 있어요 기능 중 하나는 응용 프로그램에서 현재 사용자에서 가능한 모든 로그를 얻을 수 있습니다. 나는 SessionRegistryImpl,이 방법을 알고있다. 하지만 나는 반환되지 않습니다 사용자 로그인이 방법은 서버가 다시 시작 레디 스에 의해 후에 백업되지 않습니다 것으로 나타났습니다.

 public List<Object> getAllPrincipals() {
    return new ArrayList<Object>(principals.keySet());
}

내가 시도 할 수있는 기능 중 하나는 봄 세션 1.1.0에서, 봄 세션 발견 사용자 이름입니다.

나는 시도하고 실제로 나에게 유효한 세션 결과를 반환하지만 문제는 여전히이 응용 프로그램을 사용하는 현재의 모든 유효한 사용자 이름을 알 필요가있다. (나는 다시 내가 그들을 레디 스에 저장하고 얻을 수있는, 레디 스 스토어를 사용하여 얻는 방법을 모르지만, 난 더 나은 방법이 있는지 알고 싶어요).

이 코드의 조각이 내가 세션 ID를 알고있는 경우 현재 시스템을 사용하는 많은 사용자 중 하나에서 현재 사용자를 얻을 수있는 방법입니다.

    final Session session = redisOperationsSessionRepository.getSession(sessionid);

    final Object obj = session.getAttribute(HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY);
    if (obj instanceof SecurityContext) {
        final SecurityContext context = (SecurityContext) obj;
        final Authentication authentication = context.getAuthentication();
        if (authentication != null) {
            final Object principal = authentication.getPrincipal();
            if (principal != null && principal instanceof CurrentUser) {
                return (CurrentUser) principal;
            }
        }
    }

지금은 현재의 모든 사용자를 얻기 위해 논리 이상 사용할 수 있지만 다시 나는 모든 유효한 세션 ID, 나는 레디 스 매장에서 얻을하는 방법을 모른다해야한다.

새로운 업데이트 : https://github.com/spring-projects/spring-session/issues/255 다음은이 링크에서, 나는 아마 RedisOperationSessionRepository의 활성 세션에 대한 모든 세션 ID와 모양을 얻을 수 있지만, 성능 문제가 발생할 수 있습니다.

나 자신을 취소 한 경우 내가 잘 모르겠지만, 우리가 나에게 로그인 현재 모든 유효한 세션과 현재 사용자를 제공합니다., 봄 세션 API를 사용하여 레디 스 뭔가를 말할 수 없다 (마지막으로 액세스 한 시간 또는 같은 것을 기반으로 그).

감사합니다

해결법

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

    1.레디 스 기본적으로 키 - 값 저장소입니다 및 쿼리 기능을 제공하지 않습니다.

    레디 스 기본적으로 키 - 값 저장소입니다 및 쿼리 기능을 제공하지 않습니다.

    그러나, 다음 마지막 활동으로 그들을 필터링 요청 키를 사용하여 모든 세션을 나열 할 수 있어야하지만, GitHub의 문제에서 언급 한 단점을 함께 언급했다.

    당신은 아마 데이터 저장소에서 사용자 활동을 기록 고려해야 지원하는 관계형 쿼리, 빠른 세션 저장소로 레디 스를 유지.

  2. from https://stackoverflow.com/questions/35921919/spring-session-data-redis-get-valid-sessions-current-user-from-redis-store by cc-by-sa and MIT license