Inhaltsverzeichnis
Redis speichert Benutzertokens
Generieren Sie ein Token und speichern Sie es in Redis, wenn Sie sich anmelden.
Wenn jede Seite generiert wird, geben Sie das Token an.
Wenn Sie sich abmelden, löschen Sie das Token.
Heim Datenbank Redis So lösen Sie das Problem der Speicherung von Benutzertokens in Redis

So lösen Sie das Problem der Speicherung von Benutzertokens in Redis

May 31, 2023 am 08:06 AM
redis token

    Redis speichert Benutzertokens

    Beim Entwerfen eines E-Commerce-ähnlichen Systems besteht eine allgemeine Anforderung darin, dass jede Seite Informationen über angemeldete Benutzer enthalten muss.

    Es gibt zwei gängige Lösungen:

    • Verwenden Sie Cookies zum Speichern.

    • Verwenden Sie JWT zum Speichern.

    Aber wenn Redis-Cache im System verwendet wird, gibt es auch eine dritte Lösung: Benutzer-Tokens zwischenspeichern in Redis.

    Generieren Sie ein Token und speichern Sie es in Redis, wenn Sie sich anmelden.

    //生成一个token对象,保存在redis中
    redisTemplate.opsForHash().put("token","user",user);
    Nach dem Login kopieren

    Wenn jede Seite generiert wird, geben Sie das Token an.

    //以JSON字符串形式返回token
    @RequestMapping(value = "/getToken",method = RequestMethod.GET)
    @ResponseBody
    public User getToken(){
        User user = (User) redisTemplate.opsForHash().get("token", "user");
        return user;
    }
    Nach dem Login kopieren
    //发送ajax请求,获取token
    function get_token(){
        $.ajax({
            url:"getToken",
            type:"GET",
            dataType:"JSON",
            success:function(result){
                //将返回的用户信息保存在token中
                var token = result;
                //打印登录用户
                console.log(token);
                //打印登录用户的id
                console.log(token.id);
                document.getElementById('username').innerText = "用户名:"+token.username;
            }
        });
    }
    Nach dem Login kopieren
    .

    Wenn Sie sich abmelden, löschen Sie das Token.

    //注销
    @RequestMapping("/logout")
    public String logout(){
        redisTemplate.opsForHash().delete("token","user");
        return "/login";
    }
    Nach dem Login kopieren
    basierend auf redis  

    Zunächst ist klar, dass Token: Token eine Möglichkeit ist, Benutzerinformationen für die Front-End- und Back-End-Interaktion nach der Anmeldung zu verarbeiten. Es gibt zwei Hauptmethoden, eine basiert auf der Sitzung Der andere basiert auf Redis-Speicher. In diesem Artikel wird nur die Verwendung von Redis als Benutzer erläutert.   

    Wenn bei jeder Informationsinteraktion nach der Anmeldung Benutzerinformationen, insbesondere Benutzer-IDs usw., übergeben werden müssen, ist es offensichtlich unklug, die Datenbank jedes Mal abzufragen. Wir können danach eine Datenbank in Redis erstellen Anmelden. Der Speicherplatz wird zum Speichern von Benutzerinformationen verwendet und wir rufen ihn jedes Mal von Redis ab, wenn wir Benutzerinformationen benötigen.

    Erstellen Sie zuerst RedisUtil

    @Component
    
    public class RedisUtil {
    
        @Autowired
        private RedisTemplate redisTemplate;   //key-value是对象的
    
        //判断是否存在key
        public boolean hasKey(String key) {
            return redisTemplate.hasKey(key);
        }
    
        //从redis中获取值
        public Object get(String key) {
            return redisTemplate.opsForValue().get(key);
        }
    
        //向redis插入值
        public boolean set(final String key, Object value) {
            boolean result = false;
            try {
                redisTemplate.opsForValue().set(key, value);
                result = true;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return result;
        }
    
        //向redis插入值带过期时间 单位:分钟
        public boolean set(final String key, Object value, long time) {
            boolean result = false;
            try {
                redisTemplate.opsForValue().set(key, value, time, TimeUnit.MINUTES);
                result = true;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return result;
        }
    
        //redis删除值
        public boolean del(final String key) {
            return redisTemplate.delete(key);
        }
    
        //批量删除某个字段开始的key
        public long batchDel(String key) {
            Set<String> set = redisTemplate.keys(key + "*");
            return redisTemplate.delete(set);
        }
    
    }
    Nach dem Login kopieren

    Speichern Sie nach dem Erstellen von RedisUtil den Wert in Redis. Zu diesem Zeitpunkt ist zu beachten, dass unser Schlüssel im Voraus mit dem Front-End besprochen werden muss, welcher Feldname verwendet werden soll und welcher Schlüssel muss im Header platziert werden, wenn die Front-End-Anforderungen übergeben werden. Der Wert wird verschlüsselt und nach der ersten Anmeldung an das Front-End zurückgegeben. Nachdem wir die Header-Informationen erhalten haben, müssen wir den Wert zuerst entschlüsseln und als Wert verwenden Taste, um die Benutzerinformationen abzurufen.

    @Component
    public class UserUtil {
        @Autowired
        private RedisUtil redisUtil;
        @Autowired
        private HttpServletRequest request;
    
        /**
         * 后台管理的登录id
         *
         * @return
         */
        public JsonResult getUser() {
            String header = request.getHeader("#与前端约定的统一字段#");
            //解密
            String decrypt = DESUtil.decrypt(header);
            if (!redisUtil.hasKey(decrypt))return JsonResult.error("未登录");
            User user = null;
            try {
                user = (User) redisUtil.get(decrypt);
            } catch (Exception e) {
                e.printStackTrace();
            }
            if (decrypt == null) return JsonResult.error("权限不足");
            return JsonResult.success(user);
        }
    }
    Nach dem Login kopieren

    Wenn wir es brauchen

            JsonResult jsonResult = userUtil.getUser();
            if (jsonResult.getCode() != 1) return jsonResult;
            //强转成对象。此处不用担心强转失败,因为存入的时候就是对象存储,只不过为了复用,存的是object类型
            User user= (User) jsonResult.getData();
            return JsonResult.success(#service层#);
        }
    Nach dem Login kopieren

    Das obige ist der detaillierte Inhalt vonSo lösen Sie das Problem der Speicherung von Benutzertokens in Redis. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Erklärung dieser Website
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

    Heiße KI -Werkzeuge

    Undresser.AI Undress

    Undresser.AI Undress

    KI-gestützte App zum Erstellen realistischer Aktfotos

    AI Clothes Remover

    AI Clothes Remover

    Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

    Undress AI Tool

    Undress AI Tool

    Ausziehbilder kostenlos

    Clothoff.io

    Clothoff.io

    KI-Kleiderentferner

    AI Hentai Generator

    AI Hentai Generator

    Erstellen Sie kostenlos Ai Hentai.

    Heißer Artikel

    R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
    3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. Beste grafische Einstellungen
    3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
    3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
    WWE 2K25: Wie man alles in Myrise freischaltet
    3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

    Heiße Werkzeuge

    Notepad++7.3.1

    Notepad++7.3.1

    Einfach zu bedienender und kostenloser Code-Editor

    SublimeText3 chinesische Version

    SublimeText3 chinesische Version

    Chinesische Version, sehr einfach zu bedienen

    Senden Sie Studio 13.0.1

    Senden Sie Studio 13.0.1

    Leistungsstarke integrierte PHP-Entwicklungsumgebung

    Dreamweaver CS6

    Dreamweaver CS6

    Visuelle Webentwicklungstools

    SublimeText3 Mac-Version

    SublimeText3 Mac-Version

    Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

    So reinigen Sie alle Daten mit Redis So reinigen Sie alle Daten mit Redis Apr 10, 2025 pm 05:06 PM

    So reinigen Sie alle Redis-Daten: Redis 2.8 und später: Der Befehl Flushall löscht alle Schlüsselwertpaare. Redis 2.6 und früher: Verwenden Sie den Befehl Del, um die Schlüssel nach dem anderen zu löschen oder den Redis -Client zum Löschen von Methoden zu löschen. Alternative: Starten Sie den Redis -Service (Verwendung mit Vorsicht) neu oder verwenden Sie den Redis -Client (z. B. Flushall () oder Flushdb ()).

    Wie unterschiedliche Fälle von Redis kommunizieren Wie unterschiedliche Fälle von Redis kommunizieren Apr 10, 2025 pm 05:15 PM

    Es gibt mehrere Mechanismen für die Kommunikation zwischen Redis-Instanzen: Pub/Sub: Publish/Sub-Modus und ermöglichen eine effiziente und niedrige Latenz-Nachrichten. Cluster -Modus: Verteilte Bereitstellungsmethode, die hohe Verfügbarkeit und Fehlertoleranz bietet. Cross-Instance-Befehl: Ermöglicht, Befehle direkt an eine andere Instanz zu senden, die für vorübergehende operative oder administrative Zwecke geeignet ist.

    So sehen Sie die aktuelle Redis -Version So sehen Sie die aktuelle Redis -Version Apr 10, 2025 pm 05:09 PM

    Diese Anleitung bietet zwei Möglichkeiten, um die aktuelle Redis -Version zu bestimmen: Verwenden Sie den Befehl Info, um die Versionsnummer zu erhalten. Verwenden Sie die Option -Verssionsoption, um die Versionsnummer direkt anzuzeigen. Die Versionsnummer besteht aus der Hauptversionsnummer, der Sekundärversionsnummer und der Revisionsnummer, die jeweils wichtige Versionsaktualisierungen, funktionale Verbesserungen und geringfügige Fehlerbehebungen darstellen.

    So starten Sie den Redis -Cluster neu So starten Sie den Redis -Cluster neu Apr 10, 2025 pm 05:18 PM

    Die Schritte für den Neustart von Redis -Cluster sind wie folgt: Daten schließen und löschen und Protokolle. Starten Sie den Samenknoten. Erstellen Sie einen neuen Cluster. Fügen Sie die verbleibenden Knoten hinzu. Überprüfen Sie den Clusterstatus.

    So starten Sie den Befehl Redis neu So starten Sie den Befehl Redis neu Apr 10, 2025 pm 05:21 PM

    Redis kann auf zwei Arten neu gestartet werden: reibungsloser Neustart und hartem Neustart. Reibungsloser Neustart ohne Unterbrechung des Dienstes, sodass der Kunden den Betrieb fortsetzen kann. Der harte Neustart beendet den Prozess sofort, wodurch der Client die Daten trennen und verliert. Es wird empfohlen, in den meisten Fällen einen reibungslosen Neustart zu verwenden, nur wenn Sie ernsthafte Fehler beheben oder Ihre Daten bereinigen müssen.

    So implementieren Sie Multi-Threading mit Redis So implementieren Sie Multi-Threading mit Redis Apr 10, 2025 pm 05:12 PM

    Redis implementiert Multi-Threading, indem er den Reaktormodus, den Thread-Pool und die internen Multi-Threading-Mechanismen geschickt kombiniert, wodurch die Multi-Core-CPUs effektiv verwendet werden, die Durchsatz verbessert, die Ressourcennutzung optimiert, eine geringe Latenz aufrechterhalten und die Skalierbarkeit verbessert und unterschiedliche Lastanforderungen erfüllt werden.

    Wie man mit Redis -Transaktionen umgeht Wie man mit Redis -Transaktionen umgeht Apr 10, 2025 pm 05:24 PM

    Redis -Transaktionen gewährleisten die Eigenschaften von Atomizität, Konsistenz, Isolation und Persistenz (Säure) und arbeiten wie folgt: Starten Sie eine Transaktion: Verwenden Sie den Multi -Befehl. Datensatzbefehl: Führen Sie eine beliebige Anzahl von Redis -Befehlen aus. Commit- oder Rollback -Transaktionen: Verwenden Sie den Exec -Befehl, um die Transaktion zu begehen, oder den Befehl entlassen, um die Transaktion zurückzurollen. Commit: Wenn es keinen Fehler gibt, verpflichtet der Exec -Befehl die Transaktion und alle Befehle werden atomisch auf die Datenbank angewendet. Rollback: Wenn ein Fehler vorliegt, rollt der Befehl entserät die Transaktion, alle Befehle werden verworfen und der Datenbankstatus bleibt unverändert.

    Wie wird der Redis -Cluster implementiert? Wie wird der Redis -Cluster implementiert? Apr 10, 2025 pm 05:27 PM

    Redis Cluster ist ein verteiltes Bereitstellungsmodell, das die horizontale Expansion von Redis-Instanzen ermöglicht und durch Kommunikation zwischen Noten, Hash-Slot-Abteilung Schlüsselraum, Knotenwahlen, Master-Slave-Replikation und Befehlsumleitung implementiert wird: Inter-Node-Kommunikation: Virtuelle Netzwerkkommunikation wird durch Cluster-Bus realisiert. Hash -Slot: Teilen Sie den Schlüsselraum in Hash -Slots, um den für den Schlüssel verantwortlichen Knoten zu bestimmen. Knotenwahlen: Es sind mindestens drei Master -Knoten erforderlich, und nur ein aktiver Masterknoten wird durch den Wahlmechanismus sichergestellt. Master-Slave-Replikation: Der Masterknoten ist für das Schreiben von Anforderungen verantwortlich und der Slaveknoten ist für das Lesen von Anforderungen und Datenreplikation verantwortlich. Befehlsumleitung: Der Client stellt eine Verbindung zum für den Schlüssel verantwortlichen Knoten her, und der Knoten leitet falsche Anforderungen weiter. Fehlerbehebung: Fehlererkennung, Off-Linie markieren und neu

    See all articles