spring-boot-redis : Wie entkräften Sie alle Sitzungen eines Benutzers?

Ich bin neu in redis. Ich habe folgte diesem tutorial zu verwenden HttpSession mit redis.

https://docs.spring.io/spring-session/docs/current/reference/html5/guides/boot.html

Nun meine Bewerbung hat 'Abmelden von allen Geräten" - option. Wenn dieser geklickt wird, wie kann ich die entfernen oder ungültig machen alle Sitzungen des Benutzers?

Auch, wenn der Benutzer ändert sein Passwort, wie kann ich entkräften, alle seine Sitzungen außer der aktuellen Sitzung?

Edit:

Versuchte ich mit Session-Registrierung.

@Autowired
private FindByIndexNameSessionRepository sessionRepository;

@Autowired
FindByIndexNameSessionRepository<? extends ExpiringSession> sessions;

@RequestMapping(value = "/logoutalldevices", method = RequestMethod.GET)
public Response test(HttpServletRequest request, HttpServletResponse response) throws Exception {

    SpringSessionBackedSessionRegistry sessionRegistry = new SpringSessionBackedSessionRegistry(sessionRepository);

    Collection<? extends ExpiringSession> usersSessions = sessions
            .findByIndexNameAndIndexValue(FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME, "myUserId")
            .values();

    usersSessions.forEach((temp) -> {
        String sessionId = temp.getId();
        //sessionRegistry.removeSessionInformation(sessionId);
        SessionInformation info = sessionRegistry.getSessionInformation(sessionId);
        info.expireNow();
    });

    return Response.ok().build();
}

Aber es ist nicht die Beseitigung der Sitzung vom redis-db oder ungültig zu machen es. obwohl es hinzufügen ein neues Attribut, um die session mit dem Namen 'sessionAttr:org.springframework.Sitzung.Sicherheit.SpringSessionBackedSessionInformation.ABGELAUFEN "mit dem Wert "true". Ich kann sehen, dass dieser neue Schlüssel-Wert-paar in der redis-db mit Hilfe der redis-client, wenn ich

HGETALL 'sessionid'

Bearbeiten

Ich habe versucht, das löschen der session manuell aus der redis-db mit redistemplate.

@Autowired
RedisTemplate<String, String> redisTemplate;

---------

redisTemplate.delete("spring:session:sessions:" + sessionId);
redisTemplate.delete("spring:session:sessions:expires:" + sessionId);

Diese fast funktioniert. Es löscht den Wert aus der redis-db, aber nicht den Schlüssel.

127.0.0.1:6379> keys *
1) "spring:session:sessions:25635a14-a4f1-4aa1-bf5a-bc20f972eec7"
2) "spring:session:sessions:expires:25635a14-a4f1-4aa1-bf5a-bc20f972eec7"
3) "spring:session:index:org.springframework.session.FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME:1"
127.0.0.1:6379> hgetall spring:session:sessions:25635a14-a4f1-4aa1-bf5a-bc20f972eec7
1) "lastAccessedTime"
2) "\xac\xed\x00\x05sr\x00\x0ejava.lang.Long;\x8b\xe4\x90\xcc\x8f#\xdf\x02\x00\x01J\x00\x05valuexr\x00\x10java.lang.Number\x86\xac\x95\x1d\x0b\x94\xe0\x8b\x02\x00\x00xp\x00\x00\x01[R'\x15\xc1"
127.0.0.1:6379> 

Gelöscht-alle anderen Schlüssel-Werte-Paare, die in der Sitzung außer lastAccessedTime Zeit.

Auch eine seltsam dies ist, das steht in dem log sehe ich in der redis-monitor, wenn redisTemplate.delete("key") ausgeführt wird:

1491731944.899711 [0 127.0.0.1:62816] "DEL" "spring:session:sessions:25635a14-a4f1-4aa1-bf5a-bc20f972eec7"
1491731944.899853 [0 127.0.0.1:62816] "DEL" "spring:session:sessions:expires:25635a14-a4f1-4aa1-bf5a-bc20f972eec7"

Wenn ich kopieren und fügen Sie die beiden oben genannten Befehle zum redis-client und führen Sie aus, die Tasten sind gelöscht. Ich sehe nicht, Tasten, wenn ich ausführen keys * mehr. Ich Frage mich, warum der Schlüssel nicht immer gelöscht, wenn sein gelöscht mit RedisTemplate

127.0.0.1:6379> "DEL" "spring:session:sessions:25635a14-a4f1-4aa1-bf5a-bc20f972eec7"
(integer) 1
127.0.0.1:6379> "DEL" "spring:session:sessions:expires:25635a14-a4f1-4aa1-bf5a-bc20f972eec7"
(integer) 1
127.0.0.1:6379> keys *
1) "spring:session:index:org.springframework.session.FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME:1"
127.0.0.1:6379>
  • können Sie teilen Sie Ihre spring security-Konfiguration?
  • Ich haben nicht jede Konfiguration. Gerade Hinzugefügt spring-boot-starter-Sicherheit-Abhängigkeit. Das ist es. Muss ich etwas hinzufügen?
  • Sie kommentierte // sessionRegistry.removeSessionInformation(sessionId); dass sollte funktionieren. Was passiert in deinem Fall?
  • Ich habe es versucht, das hat nicht funktioniert.
  • Würde die sessionStatus.setComplete() Arbeit für Ihren Fall?
InformationsquelleAutor HeisenBerg | 2017-03-29
Schreibe einen Kommentar