2013-05-03 3 views
0

나는 스프링 시큐리티를 사용한다. 프로세스에서 스프링 시큐리티 세션을 만료시키는 법을 모르겠습니다. 스프링 보안 세션을 수동으로 만료

나는이 시도하지만 널 포인터 예외가 있습니다 : 정상적인 기능을 보장 할 필요가 없습니다 것 같은

List<SessionInformation> allSessions; 

SessionRegistry sessionRegistry; 

// this line returns a null pointer exception 
allSessions = sessionRegistry.getAllSessions("userName", true); 

if (allSessions != null) { 
    for (SessionInformation sessionInformation : allSessions) { 
     logger.info("Expiring session for user: " 
      + username 
      + " - " 
      + sessionInformation.getSessionId()); 

     sessionInformation.expireNow(); 
    } 
} 

답변

0

SessionRegistry는 프레임 워크의 핵심 구성 요소되지 않습니다. 따라서 프레임 워크에서 프레임 워크를 작성하고 유지 보수하도록 지시하려면 몇 가지 추가 구성을 수행해야합니다.

<http> 태그 내에 봄 보안 설정이 포함 :

<security:session-management> 
    <security:concurrency-control max-sessions="100"/> 
</security:session-management> 

제대로 프레임 워크의 다른 구성 요소와 유선되는 SessionRegistry가 발생합니다 concurrency-control 태그를 사용. 이 기능은 원래 사용자가 가질 수있는 세션 수가 제한되어있는 구성을 허용하기 위해 개발되었으므로 max-sessions 속성을 설정해야합니다 (그렇지 않으면 기본값은 1). 이 "부작용"을 원하지 않으면 충분히 높은 숫자를 부여하십시오. 또한

, 당신의 web.xml이 포함됩니다

SessionRegistry이 때 사용자 세션이 종료를 통보 가도록 (듯이), 필요
<listener> 
    <listener-class> 
     org.springframework.security.web.session.HttpSessionEventPublisher 
    </listener-class> 
</listener> 

.

그런 다음 SessionRegistry 필드의 선언에 @Autowired을 추가하거나 코드가 다른 방식으로 삽입되었는지 확인하십시오.

스프링 보안의 세션 관리에 대한 자세한 내용은 short chapter 참조 문서를 참조하십시오.

+0

멋진 설명을 해 주셔서 감사합니다. 하지만 여전히이 예외가 발생합니다 : java.lang.NullPointerException이 sessionRegistry.getAllSessions ("userName", true); – loulou

+0

더 많은 코드와 구성을 공유하는 경우에만 도움을 드릴 수 있습니다. 'sessionRegistry'가 실제로 클래스에 주입되도록하기 위해 무엇을 시도 했습니까? 클래스가 스프링 빈으로 인스턴스화되어 있습니까? 'sessionRegistry' 또는 속성/생성자 주입을 사용 했습니까? 보안 설정에는 어떤 것이 있습니까? 기타 귀하의 질문에 관련 정보를 업데이트하십시오. – zagyi

관련 문제