감사합니다. SessionRegistry
을 사용하면 getAllPrincipals()을 사용하여 사용자를 세션의 현재 활성 사용자와 비교할 수 있습니다. 세션이 존재하는 경우 expireNow() (SessionInformation
)을 사용하여 세션을 무효화하여 강제로 재 인증 할 수 있습니다.
그러나 securityContextPersistenceFilter
의 유용성을 이해하지 못합니까?
편집 : 동적으로 로그 아웃 물론 로그인 할 필요없이, (이들은 어떤 이유 변경된 경우) 사용자의 권한으로 로그인 업데이트해야하는 경우
// user object = User currently updated
// invalidate user session
List<Object> loggedUsers = sessionRegistry.getAllPrincipals();
for (Object principal : loggedUsers) {
if(principal instanceof User) {
final User loggedUser = (User) principal;
if(user.getUsername().equals(loggedUser.getUsername())) {
List<SessionInformation> sessionsInfo = sessionRegistry.getAllSessions(principal, false);
if(null != sessionsInfo && sessionsInfo.size() > 0) {
for (SessionInformation sessionInformation : sessionsInfo) {
LOGGER.info("Exprire now :" + sessionInformation.getSessionId());
sessionInformation.expireNow();
sessionRegistry.removeSessionInformation(sessionInformation.getSessionId());
// User is not forced to re-logging
}
}
}
}
}
'서블릿 환경에서'HttpSession'에'SecurityContext'를 넣어 것입니다 기본적으로 securityContextPersistenceFilter'. 이미 out-of-the-box 스프링 SessionRegistry를 사용하고 있으므로이 필터를 사용자 정의 할 필요가 없습니다. – alexkasko
나는 서블릿 환경에 있는데, securityContextPersistenceFilter를 커스터마이즈하는 것이 유용할까요? – Aure77
다른 사례가 가능합니다. 'HttpSession'은 사용할 수없고 스레드 로컬 저장을 원하지 않습니다. 그래서 당신은'securityContextRepository'의 당신 자신의 구현을 사용할 수 있습니다. 'HttpSession' 저장소가 당신의 요구에 맞으면, 유용성이 없다. – alexkasko