Sa-Token v1.39.0
Ein leichtes Java-Berechtigungsauthentifizierungs-Framework, das die Authentifizierung einfach und elegant macht!
Online-Dokumentation: https://sa-token.cc
Sa-Token-Einführung
Sa-Token ist ein leichtes Java-Framework zur Berechtigungsauthentifizierung, das derzeit über fünf Kernmodule verfügt: Anmeldeauthentifizierung, Berechtigungsauthentifizierung, Single Sign-On, OAuth2.0 und Microservice-Authentifizierung.
Einfache Beispielanzeige: (zum Erweitern/Verkleinern anklicken)
Sa-Token zielt darauf ab, den Berechtigungsauthentifizierungsteil des Systems auf einfache und elegante Weise zu vervollständigen. Am Beispiel der Anmeldeauthentifizierung benötigen Sie lediglich Folgendes:
// 会话登录,参数填登录人的账号id
StpUtil . login ( 10001 );
Es ist nicht erforderlich, eine Schnittstelle zu implementieren oder eine Konfigurationsdatei zu erstellen. Sie müssen nur diesen statischen Code aufrufen, um die Sitzungsanmeldeauthentifizierung abzuschließen.
Wenn für den Zugriff auf eine Schnittstelle eine Anmeldung erforderlich ist, müssen wir nur den folgenden Code aufrufen:
// 校验当前客户端是否已经登录,如果未登录则抛出 `NotLoginException` 异常
StpUtil . checkLogin ();
In Sa-Token können die meisten Funktionen mit einer Codezeile gelöst werden:
Leute offline werfen:
// 将账号id为 10077 的会话踢下线
StpUtil . kickout ( 10077 );
Berechtigungsauthentifizierung:
// 注解鉴权:只有具备 `user:add` 权限的会话才可以进入方法
@ SaCheckPermission ( "user:add" )
public String insert ( SysUser user ) {
// ...
return "用户增加" ;
}
Authentifizierung beim Abfangen von Routen:
StpUtil.checkPermission("user"));
SaRouter.match("/admin/**", r -> StpUtil.checkPermission("admin"));
SaRouter.match("/goods/**", r -> StpUtil.checkPermission("goods"));
SaRouter.match("/orders/**", r -> StpUtil.checkPermission("orders"));
SaRouter.match("/notice/**", r -> StpUtil.checkPermission("notice"));
// 更多模块...
})).addPathPatterns("/**");">
// 根据路由划分模块,不同模块不同鉴权
registry . addInterceptor ( new SaInterceptor ( handler -> {
SaRouter . match ( "/user/**" , r -> StpUtil . checkPermission ( "user" ));
SaRouter . match ( "/admin/**" , r -> StpUtil . checkPermission ( "admin" ));
SaRouter . match ( "/goods/**" , r -> StpUtil . checkPermission ( "goods" ));
SaRouter . match ( "/orders/**" , r -> StpUtil . checkPermission ( "orders" ));
SaRouter . match ( "/notice/**" , r -> StpUtil . checkPermission ( "notice" ));
// 更多模块...
})). addPathPatterns ( "/**" );
Wenn Sie genug von Shiro, SpringSecurity und anderen Frameworks haben, werden Sie verstehen, wie einfach und elegant das API-Design von Sa-Token im Vergleich zu diesen traditionellen alten Frameworks ist!
Liste der Kernmodule: (zum Erweitern/Reduzieren klicken)
- Login-Authentifizierung – Single-End-Login, Multi-End-Login, sich gegenseitig ausschließende Same-End-Login, keine Anmeldung innerhalb von sieben Tagen erforderlich.
- Berechtigungsauthentifizierung – Autoritätsauthentifizierung, Rollenauthentifizierung, sekundäre Sitzungsauthentifizierung.
- Personen offline schalten – Personen aufgrund ihrer Konto-ID offline schalten und Personen aufgrund ihres Token-Werts offline schalten.
- Annotationsbasierte Authentifizierung – trennt Authentifizierung elegant vom Geschäftscode.
- Route-Interception-Authentifizierung – Basierend auf der Route-Interception-Authentifizierung kann der Ruhemodus angepasst werden.
- Sitzung – Gemeinsame Sitzung für alle Enden, exklusive Sitzung für ein Ende, benutzerdefinierte Sitzung, bequemer Zugriff auf Werte.
- Erweiterung der Persistenzebene – Redis kann integriert werden und die Daten gehen nach dem Neustart nicht verloren.
- Trennung von Front- und Backend – auch APPs, Applets und andere Endgeräte, die keine Cookies unterstützen, können problemlos authentifiziert werden.
- Anpassung des Token-Stils – sechs integrierte Token-Stile, Sie können auch die Strategie zur Token-Generierung anpassen.
- Modus „Angemeldet speichern“ – Passen Sie den Modus „Angemeldet speichern“ an und starten Sie den Browser ohne Bestätigung neu.
- Authentifizierung der zweiten Ebene – Authentifizierung wiederum basierend auf der Anmeldung, um die Sicherheit zu gewährleisten.
- Simulieren Sie die Konten anderer Personen – Bearbeiten Sie alle Benutzerstatusdaten in Echtzeit.
- Temporärer Identitätswechsel – Wechseln Sie die Sitzungsidentität vorübergehend auf ein anderes Konto.
- Sich gegenseitig ausschließende Anmeldung am gleichen Ende – wie bei QQ sind das Mobiltelefon und der Computer gleichzeitig online, aber die Anmeldung auf beiden Mobiltelefonen schließt sich gegenseitig aus.
- Kontosperrung – Anmeldesperre, Sperrung der Unternehmensklassifizierung und Sperrung der Bestrafungsleiter.
- Passwortverschlüsselung – Bietet grundlegende Verschlüsselungsalgorithmen, mit denen MD5, SHA1, SHA256 und AES schnell verschlüsselt werden können.
- Sitzungsabfrage – Bietet eine praktische und flexible Schnittstelle für Sitzungsabfragen.
- HTTP-Basic-Authentifizierung – Eine Codezeile für den Zugriff auf die HTTP-Basic- und Digest-Authentifizierung.
- Globaler Listener – führt einige AOP-Vorgänge bei wichtigen Vorgängen aus, z. B. bei der Benutzeranmeldung, -abmeldung und beim Offline-Kick.
- Globaler Filter – Bewältigt bequem domänenübergreifende und global festgelegte erstklassige Sicherheitsreaktionsvorgänge.
- Systemauthentifizierung mit mehreren Konten – separate Authentifizierung mehrerer Konten in einem System (z. B. der Benutzertabelle und der Admin-Tabelle des Einkaufszentrums)
- Single Sign-On – Es gibt drei integrierte Single Sign-On-Modi: gleiche Domäne, domänenübergreifend, gleiches Redis, Cross-Redis, Front-End- und Back-End-Trennung und andere Architekturen können gehandhabt werden.
- Einzelpunkt-Abmeldung – Initiieren Sie eine Abmeldung in einem beliebigen Subsystem, und das gesamte System wird offline sein.
- OAuth2.0-Authentifizierung – Erstellen Sie ganz einfach OAuth2.0-Dienste und unterstützen Sie den OpenID-Modus.
- Verteilte Sitzung – Bietet eine verteilte Sitzungslösung in einem gemeinsam genutzten Rechenzentrum.
- Microservice-Gateway-Authentifizierung – passt sich an die Route-Interception-Authentifizierung gängiger Gateways wie Gateway, ShenYu, Zuul usw. an.
- RPC-Anrufauthentifizierung – Gateway-Weiterleitungsauthentifizierung, RPC-Anrufauthentifizierung, damit Serviceaufrufe nicht mehr nackt ausgeführt werden
- Temporäre Token-Authentifizierung – löst kurzfristige Token-Autorisierungsprobleme.
- Unabhängiges Redis – trennt Berechtigungscache und Geschäftscache.
- Schnelle schnelle Anmeldeauthentifizierung – Fügen Sie eine Anmeldeseite ohne Code in das Projekt ein.
- Tag-Dialekt – Stellt das Thymeleaf-Tag-Dialekt-Integrationspaket und Beispiele für die Beetle-Integration bereit.
- JWT-Integration – Bietet drei Modi von JWT-Integrationslösungen und stellt Funktionen für Token-Erweiterungsparameter bereit.
- RPC-Anrufstatusübertragung – Stellt Integrationspakete wie Dubbo und Grpc bereit, sodass der Anmeldestatus bei RPC-Aufrufen nicht verloren geht.
- Parametersignatur – Bietet ein systemübergreifendes Modul zur Überprüfung der API-Aufrufsignatur, um Parametermanipulationen und Anforderungswiedergaben zu verhindern.
- Automatische Erneuerung – Es stehen zwei Token-Ablaufstrategien zur Verfügung, die flexibel eingesetzt und automatisch erneuert werden können.
- Sofort einsatzbereit – Bietet gängige Framework-Integrationspakete wie SpringMVC, WebFlux, Solon usw., die sofort einsatzbereit sind.
- Der neueste Technologie-Stack – angepasst an den neuesten Technologie-Stack: unterstützt SpringBoot 3.x, JDK 17.
SSO-Single-Sign-On
Sa-Token SSO ist in drei Modi unterteilt, um SSO-Zugriffsprobleme unter verschiedenen Architekturen zu lösen, z. B. Same-Domain, Cross-Domain, Shared Redis, Cross-Redis, Front-End- und Back-End-Integration, Front-End und Back-End Trennung...usw.:
Systemarchitektur | Adoptionsmuster | Einführung | Link zur Dokumentation |
---|
Das Front-End befindet sich in derselben Domäne und das Back-End befindet sich in derselben Domäne wie Redis | Modus eins | Geteilte Cookie-Synchronisierungssitzung | Dokumentation, Beispiele |
Verschiedene Domänen im Front-End + Gleiches wie Redis im Back-End | Modus 2 | URL-Umleitung verbreitet Sitzung | Dokumentation, Beispiele |
Unterschiedliche Domänen im Frontend + unterschiedliche Redis im Backend | Modus drei | HTTP-Anfrage zum Abrufen der Sitzung | Dokumentation, Beispiele |
- Gleiche Front-End-Domäne: Dies bedeutet, dass mehrere Systeme unter demselben Hauptdomänennamen bereitgestellt werden können, z. B.
c1.domain.com
, c2.domain.com
, c3.domain.com
- Das Backend ist das gleiche wie bei Redis: Das bedeutet, dass mehrere Systeme eine Verbindung zu demselben Redis herstellen können. (Dies erfordert nicht, dass alle Projektdaten in einem Redis abgelegt werden. Sa-Token bietet eine Lösung zur
[权限缓存与业务缓存分离]
) - Wenn sich weder das Front-End noch das Back-End in derselben Domäne wie Redis befinden können, können Sie Modus drei, HTTP-Anforderungsbestätigungsticket, verwenden, um die Sitzung abzurufen.
- Es wird ein Beispiel für den NoSdk-Modus bereitgestellt. Es können auch Systeme angeschlossen werden, die kein Sa-Token verwenden.
- Stellen Sie eine Dokumentation der SSO-Serverschnittstelle bereit. Es können auch Systeme angeschlossen werden, die keine Java-Sprache verwenden.
- Bietet Front-End- und Back-End-Trennungs- und Integrationslösungen: Unabhängig davon, ob es sich um einen SSO-Server oder einen SSO-Client handelt, können sowohl die Front-End- als auch die Back-End-Trennung integriert werden.
- Bietet Sicherheitsüberprüfung: Überprüfung des Domänennamens, Überprüfung des Tickets, Überprüfung der Parametersignatur, wodurch Ticket-Hijacking, Anforderungswiederholung und andere Angriffe wirksam verhindert werden.
- Verhinderung von Parameterverlust: Der Autor hat mehrere SSO-Frameworks getestet und alle Parameter sind verloren gegangen. Vor der Anmeldung war es beispielsweise:
http://a.com?id=1&name=2
, und nach erfolgreicher Anmeldung wurde es : http://a.com?id=1
, Sa-Token-SSO verfügt über einen speziellen Algorithmus, um sicherzustellen, dass Parameter nicht verloren gehen und der ursprüngliche Pfad nach erfolgreicher Anmeldung korrekt zurückgegeben wird. - Unterbreiten Sie Vorschläge für Benutzerdaten-Synchronisierungs-/Migrationslösungen: einheitliche Migration vor der Entwicklung, Echtzeit-Datensynchronisierung während der Laufzeit, Abgleich basierend auf zugehörigen Feldern, Abgleich basierend auf center_id-Feldern usw.
- Bietet direkt ausführbare Demobeispiele, die Ihnen helfen, sich schnell mit dem allgemeinen SSO-Anmeldeprozess vertraut zu machen.
OAuth2-Autorisierungsauthentifizierung
Das Sa-Token-OAuth2-Modul ist in vier Autorisierungsmodi unterteilt, um die Autorisierungsanforderungen in verschiedenen Szenarien zu erfüllen.
Autorisierungsmodus | Einführung |
---|
Autorisierungscode | Im OAuth2.0-Standardautorisierungsschritt überträgt der Server den Code an den Client und der Client tauscht den Code gegen das Autorisierungstoken aus. |
Implizit | Als Backup-Option, wenn der Autorisierungscode-Modus nicht verwendet werden kann, verwendet der Server die URL-Umleitung, um das Token direkt an die Client-Seite zu übertragen. |
Passwort | Der Kunde tauscht direkt das Konto und das Passwort des Benutzers gegen das Autorisierungstoken aus. |
Kundenanmeldeinformationen | Serverseitiges Token für Clientebene, das die eigene Ressourcenautorisierung der Anwendung darstellt |
Detailliertes Referenzdokument: https://sa-token.cc/doc.html#/oauth2/readme
Fall einer Open-Source-Integration
- [Snowy]: Chinas erste schnelle Entwicklungsplattform, die mithilfe von Vue3 + AntDesignVue3 + Vite + SpringBoot + Mp + HuTool + SaToken nationale Geheimnisse von vorher und nachher trennt.
- [RuoYi-Vue-Plus]: Schreiben Sie alle Funktionen von RuoYi-Vue neu und integrieren Sie Sa-Token+Mybatis-Plus+Jackson+Xxl-Job+knife4j+Hutool+OSS für eine regelmäßige Synchronisierung
- [Smart-Admin]: SmartAdmin ist Chinas erste schnelle Entwicklungsplattform für das Middle- und Backend mit „hochwertigem Code“ als Kern und „einfach, effizient und sicher“;
- [Dengdeng]: Eine Microservice-Mid- und Backend-Schnellentwicklungsplattform mit Schwerpunkt auf mandantenfähigen Lösungen. Der Mandantenmodus unterstützt eine unabhängige Datenbank (DATASOURCE-Modus), eine gemeinsam genutzte Datenarchitektur (COLUMN-Modus) und einen Nicht-Mandantenmodus (NONE-Modus).
- [EasyAdmin]: Ein Backend-Verwaltungssystem basierend auf SpringBoot2 + Sa-Token + Mybatis-Plus + Snakerflow + Layui. Es ist flexibel und kann das Front- und Backend trennen oder eine einzelne Einheit sein Generator, Berechtigungsverwaltung, Workflow-Engine usw.
- [ sa-admin-server ]: Hintergrundmanagement-Entwicklungsgerüst basierend auf sa-admin-ui.
Es gibt weitere hervorragende Open-Source-Fälle, die nicht einzeln angezeigt werden können. Weitere Informationen finden Sie unter: Awesome-Sa-Token
Freundliche Links
- [OkHttps]: Leichtes HTTP-Kommunikationsframework, äußerst elegante API, unterstützt WebSocket- und Stomp-Protokolle
- [Bean Searcher]: Ein schreibgeschütztes ORM, das sich auf erweiterte Abfragen konzentriert und das Abrufen komplexer Listen mit einer Codezeile ermöglicht!
- [Jpom]: Einfache und leichte, wenig aufdringliche Online-Konstruktion, automatische Bereitstellung, täglicher Betrieb und Wartung sowie Projektüberwachungssoftware.
- [TLog]: Ein leichtes, verteiltes Protokoll-Tag-Tracking-Artefakt.
- [hippo4j]: Ein leistungsstarkes dynamisches Thread-Pool-Framework mit Überwachungs- und Alarmfunktionen.
- [hertzbeat]: Ein benutzerfreundliches und benutzerfreundliches Open-Source-Echtzeitüberwachungs- und Alarmsystem, kein Agent erforderlich, leistungsstarker Cluster und leistungsstarke benutzerdefinierte Überwachungsfunktionen.
- [Solon]: Ein moderneres Anwendungsentwicklungs-Framework: schneller, kleiner und kostenloser.
- [Chat2DB]: Ein KI-gesteuertes Datenbankverwaltungs- und BI-Tool, das die Verwaltung von 22 Datenbanken wie Mysql, pg, Oracle und Redis unterstützt.
Code-Hosting
- Gitee: https://gitee.com/dromara/sa-token
- GitHub: https://github.com/dromara/sa-token
- GitCode: https://gitcode.com/dromara/sa-token
Kommunikationsgruppe
QQ-Kommunikationsgruppe: 823181187 Klicken Sie hier, um beizutreten
WeChat-Kommunikationsgruppe:
(Scannen Sie den QR-Code, um WeChat hinzuzufügen. Hinweis: sa-token. Laden Sie ein, dem Gruppenchat beizutreten.)
Vorteile der Teilnahme an einem Gruppenchat:
- Erhalten Sie so schnell wie möglich Benachrichtigungen über Framework-Updates.
- Erhalten Sie so schnell wie möglich Benachrichtigungen zu Framework-Fehlern.
- Erhalten Sie so schnell wie möglich Benachrichtigungen über neue Open-Source-Fälle.
- Kommunizieren (mō yú) untereinander (huá shuǐ) mit vielen großen Leuten.