Sa トークン v1.39.0
認証をシンプルかつエレガントにする軽量の Java 権限認証フレームワークです。
オンラインドキュメント: https://sa-token.cc
SAトークンの紹介
Sa-Token は、軽量の Java 権限認証フレームワークであり、現在、ログイン認証、権限認証、シングル サインオン、OAuth2.0、およびマイクロサービス認証の 5 つのコア モジュールを備えています。
簡単な表示例: (クリックして展開/折りたたみ)
Sa-Token は、システムの権限認証部分をシンプルかつ洗練された方法で完了することを目的としています。ログイン認証を例に挙げると、必要なのは次のとおりです。
// 会话登录,参数填登录人的账号id
StpUtil . login ( 10001 );
インターフェイスを実装したり、構成ファイルを作成したりする必要はありません。この静的コードを呼び出すだけで、セッション ログイン認証を完了できます。
インターフェイスにアクセスするためにログインが必要な場合は、次のコードを呼び出すだけで済みます。
// 校验当前客户端是否已经登录,如果未登录则抛出 `NotLoginException` 异常
StpUtil . checkLogin ();
Sa-Token では、ほとんどの関数は 1 行のコードで解決できます。
人々をオフラインに追い出す:
// 将账号id为 10077 的会话踢下线
StpUtil . kickout ( 10077 );
権限認証:
// 注解鉴权:只有具备 `user:add` 权限的会话才可以进入方法
@ SaCheckPermission ( "user:add" )
public String insert ( SysUser user ) {
// ...
return "用户增加" ;
}
ルートインターセプト認証:
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 ( "/**" );
hiro、SpringSecurity、その他のフレームワークにうんざりしている場合、これらの伝統的な古いフレームワークと比較して、Sa-Token の API 設計がいかにシンプルでエレガントであるかがわかるでしょう。
コアモジュールのリスト: (クリックして展開/折りたたみ)
- ログイン認証- シングルエンド ログイン、マルチエンド ログイン、同じエンドの相互排他的ログイン、7 日以内はログイン不要。
- 権限認証- 権限認証、ロール認証、セッション二次認証。
- ユーザーをオフラインにキックする- アカウント ID に基づいてユーザーをオフラインにキックし、トークン値に基づいてユーザーをオフラインにキックします。
- 注釈ベースの認証- 認証をビジネス コードからエレガントに分離します。
- ルート インターセプト認証- ルート インターセプト認証に基づいて、Restful モードを適応させることができます。
- セッション- すべてのエンドの共有セッション、一方のエンドの排他的セッション、カスタマイズされたセッション、値への便利なアクセス。
- 永続化レイヤー拡張- Redis を統合でき、再起動後にデータが失われません。
- フロントエンドとバックエンドの分離- Cookie をサポートしていない APP、アプレット、その他の端末も簡単に認証できます。
- トークン スタイルのカスタマイズ- 6 つの組み込みトークン スタイル。トークン生成戦略もカスタマイズできます。
- Remember Me モード- [Remember Me] モードに適応し、検証せずにブラウザを再起動します。
- 第 2 レベルの認証- セキュリティを確保するためにログインに基づいて再度認証します。
- 他の人のアカウントをシミュレート- ユーザーステータスデータをリアルタイムで操作します。
- 一時的な ID 切り替え- セッション ID を別のアカウントに一時的に切り替えます。
- 同一エンド相互排他ログイン- QQ と同様、携帯電話とコンピュータは同時にオンラインですが、ログインは 2 台の携帯電話で相互排他的です。
- アカウント禁止- ログイン禁止、ビジネス分類禁止、および罰はしご禁止。
- パスワード暗号化- MD5、SHA1、SHA256、および AES を迅速に暗号化できる基本的な暗号化アルゴリズムを提供します。
- セッション クエリ- 便利で柔軟なセッション クエリ インターフェイスを提供します。
- Http Basic 認証- HTTP Basic 認証およびダイジェスト認証にアクセスするための 1 行のコード。
- グローバル リスナー- ユーザーのログイン、ログアウト、オフライン化などの主要な操作中に一部の AOP 操作を実行します。
- グローバル フィルター- クロスドメインおよびグローバルに設定されたセキュリティ応答のファーストクラスの操作を便利に処理します。
- マルチアカウント システム認証- 1 つのシステム内の複数のアカウントの個別の認証 (モールのユーザー テーブルと管理者テーブルなど)
- シングル サインオン- 3 つの組み込みシングル サインオン モードがあります: 同一ドメイン、クロスドメイン、同一 Redis、クロス Redis、フロントエンドとバックエンドの分離、およびその他のアーキテクチャを処理できます。
- シングルポイントログアウト- 任意のサブシステムでログアウトを開始すると、システム全体がオフラインになります。
- OAuth2.0 認証- openid モードをサポートする OAuth2.0 サービスを簡単に構築します。
- 分散セッション- 共有データセンターで分散セッション ソリューションを提供します。
- マイクロサービス ゲートウェイ認証- Gateway、ShenYu、Zuul などの一般的なゲートウェイのルート インターセプト認証に適応します。
- RPC コール認証- ゲートウェイ転送認証、RPC コール認証により、サービス コールが裸で実行されなくなります。
- 一時的なトークン認証- 短期的なトークン認証の問題を解決します。
- 独立した Redis - 権限キャッシュとビジネス キャッシュを分離します。
- 迅速なログイン認証- コードを含まないログイン ページをプロジェクトに挿入します。
- タグ方言- Thymeleaf タグ方言統合パッケージを提供し、beetl 統合サンプルを提供します。
- jwt 統合- jwt 統合ソリューションの 3 つのモードを提供し、トークン拡張パラメーター機能を提供します。
- RPC 呼び出しステータス転送- RPC 呼び出し中にログイン ステータスが失われないように、dubbo や grpc などの統合パッケージを提供します。
- パラメーター署名- パラメーターの改ざんとリクエストのリプレイを防止するために、クロスシステム API 呼び出し署名検証モジュールを提供します。
- 自動更新- 2 つのトークン有効期限戦略が提供されており、柔軟に使用して自動的に更新できます。
- すぐに使用できる- SpringMVC、WebFlux、Solon など、すぐに使用できる一般的なフレームワーク統合パッケージを提供します。
- 最新のテクノロジー スタック- 最新のテクノロジー スタックに適応: SpringBoot 3.x、jdk 17 をサポートします。
SSOシングルサインオン
Sa-Token SSO は、同一ドメイン、クロスドメイン、共有 Redis、クロス Redis、フロントエンドとバックエンドの統合、フロントエンドとバックエンドなどの異なるアーキテクチャ下での SSO アクセス問題を解決するために 3 つのモードに分かれています。分離...など:
システムアーキテクチャ | 採用パターン | 導入 | ドキュメントへのリンク |
---|
フロントエンドは同じドメイン内にあり、バックエンドは Redis と同じドメイン内にあります。 | モード 1 | 共有 Cookie 同期セッション | ドキュメント、例 |
フロントエンドの異なるドメイン + バックエンドの Redis と同じ | モード2 | URL リダイレクトによるセッションの伝播 | ドキュメント、例 |
フロントエンドの異なるドメイン + バックエンドの異なる Redis | モード 3 | セッションを取得するためのHTTPリクエスト | ドキュメント、例 |
- フロントエンドの同じドメイン:
c1.domain.com
、 c2.domain.com
、 c3.domain.com
など、同じメイン ドメイン名の下に複数のシステムを展開できることを意味します。 - バックエンドは Redis と同じです。つまり、複数のシステムが同じ Redis に接続できるということです。 (すべてのプロジェクトデータを1つのRedisに配置する必要はありません。Sa-Tokenは
[权限缓存与业务缓存分离]
ソリューションを提供します) - フロントエンドもバックエンドも Redis と同じドメインに存在できない場合は、モード 3 の Http リクエスト検証チケットを使用してセッションを取得できます。
- NoSdk モードの例が提供されており、Sa-Token を使用しないシステムも接続できます。
- sso-server インターフェースのドキュメントを提供し、Java 言語を使用しないシステムにも接続できます。
- フロントエンドとバックエンドの分離および統合ソリューションを提供します。sso サーバーまたは sso クライアントのいずれであっても、フロントエンドとバックエンドの分離の両方を統合できます。
- セキュリティ検証を提供します: ドメイン名検証、チケット検証、パラメータ署名検証、チケットハイジャック、リクエストリプレイ、その他の攻撃を効果的に防止します。
- パラメータ損失の防止: 作成者は複数の SSO フレームワークをテストしましたが、たとえば、ログイン前は
http://a.com?id=1&name=2
でしたが、ログインに成功すると次のようになりました。 : http://a.com?id=1
、Sa-Token-SSO には、パラメータが失われず、ログイン成功後に元のパスが正確に返されることを保証する特別なアルゴリズムがあります。 - ユーザー データの同期/移行ソリューションに関する提案を提供します。開発前の統合移行、実行時のリアルタイム データ同期、関連フィールドに基づくマッチング、center_id フィールドに基づくマッチングなどです。
- 一般的な SSO ログイン プロセスにすぐに慣れるのに役立つ、直接実行可能なデモの例を提供します。
OAuth2認可認証
Sa-Token-OAuth2 モジュールは、さまざまなシナリオでの承認ニーズを解決するために 4 つの承認モードに分割されています。
認可モード | 導入 |
---|
認証コード | OAuth2.0 標準の認証ステップでは、サーバーがコードをクライアントに転送し、クライアントはコードを認証トークンと交換します。 |
暗黙 | 認証コード モードを使用できない場合のバックアップ オプションとして、サーバーは URL リダイレクトを使用してトークンをクライアント ページに直接転送します。 |
パスワード | クライアントは、ユーザーのアカウントとパスワードを認証トークンと直接交換します。 |
クライアントの資格情報 | アプリケーション自身のリソース認可を表すクライアントレベルのサーバー側トークン |
詳細な参考ドキュメント: https://sa-token.cc/doc.html#/oauth2/readme
オープンソース統合の事例
- [Snowy]: Vue3 + AntDesignVue3 + Vite + SpringBoot + Mp + HuTool + SaToken を使用した、中国初の国家機密を前後に分離する高速開発プラットフォーム。
- [ RuoYi-Vue-Plus ]: RuoYi-Vue のすべての機能を書き換え、定期的な同期のために Sa-Token+Mybatis-Plus+Jackson+Xxl-Job+knife4j+Hutool+OSS を統合します。
- [Smart-Admin]: SmartAdmin は、「高品質のコード」をコアとし、「シンプル、効率的、安全」な中国初のミドルおよびバックエンド向けの迅速な開発プラットフォームです。
- [Dengdeng]: マルチテナント ソリューションに焦点を当てたマイクロサービスのミッドエンドおよびバックエンドの迅速な開発プラットフォーム。テナント モードは、独立したデータベース (DATASOURCE モード)、共有データ アーキテクチャ (COLUMN モード)、および非テナント モード (NONE モード) をサポートします。
- [EasyAdmin]: SpringBoot2 + Sa-Token + Mybatis-Plus + Snakerflow + Layui に基づくバックエンド管理システム。柔軟性があり、フロントエンドとバックエンドを分離することも、単一のエンティティにすることもできます。ジェネレーター、権限管理、ワークフローエンジンなど
- [ sa-admin-server ]: sa-admin-ui に基づくバックグラウンド管理開発スキャフォールディング。
1つずつ紹介しきれない優れたオープンソース事例は他にもありますので、こちらを参照してください: Awesome-Sa-Token
フレンドリーリンク
- [ OkHttps ]: 軽量の http 通信フレームワーク、非常にエレガントな API、WebSocket および Stomp プロトコルをサポート
- [Bean Searcher]: 高度なクエリに焦点を当てた読み取り専用 ORM で、1 行のコードで複雑なリストの取得を可能にします。
- [Jpom]: シンプルかつ軽量で低侵入型のオンライン構築、自動展開、日常の運用と保守、およびプロジェクト監視ソフトウェア。
- [TLog]: 軽量の分散ログタグ追跡アーティファクト。
- [hippo4j]: 監視およびアラーム機能を備えた強力な動的スレッド プール フレームワーク。
- [ hertzbeat ]: 使いやすくフレンドリーなオープンソースのリアルタイム監視および警報システム、エージェント不要、高性能クラスター、強力なカスタム監視機能。
- [Solon]: より現代的なアプリケーション開発フレームワーク: より速く、より小さく、より無料。
- 【Chat2DB】:Mysql、pg、Oracle、Redisなど22種類のデータベースの管理をサポートするAIを活用したデータベース管理・BIツール。
コードホスティング
- Gitee: https://gitee.com/dromara/sa-token
- GitHub: https://github.com/dromara/sa-token
- GitCode: https://gitcode.com/dromara/sa-token
コミュニケーショングループ
QQ コミュニケーション グループ: 823181187 クリックして参加
WeChatコミュニケーショングループ:
(QR コードをスキャンして WeChat を追加します。注: sa-token、グループ チャットへの参加を招待します)
グループチャットに参加するメリット:
- フレームワークの更新通知をできるだけ早く受け取ります。
- フレームワークのバグ通知をできるだけ早く受け取ります。
- 新しいオープンソース ケースの通知をできるだけ早く受け取ります。
- 多くの偉い人たちとコミュニケーション (mō yú) し、お互い (huá shuà) に交流しましょう。