Sa-Token v1.39.0
Kerangka kerja otentikasi izin Java ringan yang membuat otentikasi sederhana dan elegan!
Dokumentasi online: https://sa-token.cc
Pengenalan Sa-Token
Sa-Token adalah kerangka autentikasi izin Java ringan yang saat ini memiliki lima modul inti: autentikasi login, autentikasi izin, sistem masuk tunggal, OAuth2.0, dan autentikasi layanan mikro.
Contoh tampilan sederhana: (klik untuk meluaskan/menutup)
Sa-Token bertujuan untuk menyelesaikan bagian otentikasi izin sistem dengan cara yang sederhana dan elegan. Mengambil otentikasi login sebagai contoh, Anda hanya perlu:
// 会话登录,参数填登录人的账号id
StpUtil . login ( 10001 );
Tidak perlu mengimplementasikan antarmuka apa pun atau membuat file konfigurasi apa pun. Anda hanya perlu memanggil kode statis ini untuk menyelesaikan otentikasi login sesi.
Jika suatu antarmuka memerlukan login untuk mengakses, kita hanya perlu memanggil kode berikut:
// 校验当前客户端是否已经登录,如果未登录则抛出 `NotLoginException` 异常
StpUtil . checkLogin ();
Di Sa-Token, sebagian besar fungsi dapat diselesaikan dengan satu baris kode:
Tendang orang secara offline:
// 将账号id为 10077 的会话踢下线
StpUtil . kickout ( 10077 );
Otentikasi izin:
// 注解鉴权:只有具备 `user:add` 权限的会话才可以进入方法
@ SaCheckPermission ( "user:add" )
public String insert ( SysUser user ) {
// ...
return "用户增加" ;
}
Otentikasi intersepsi rute:
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 ( "/**" );
Ketika Anda bosan dengan Shiro, SpringSecurity, dan kerangka kerja lainnya, Anda akan memahami betapa sederhana dan elegannya desain API Sa-Token dibandingkan dengan kerangka kerja lama tradisional ini!
Daftar modul inti: (klik untuk memperluas/menutup)
- Otentikasi login - login satu ujung, login multi-end, login saling eksklusif di ujung yang sama, tidak perlu login dalam tujuh hari.
- Otentikasi izin - otentikasi otoritas, otentikasi peran, otentikasi sekunder sesi.
- Menendang orang offline - Menendang orang offline berdasarkan ID akun mereka, dan menendang orang offline berdasarkan nilai Token mereka.
- Otentikasi berbasis anotasi - memisahkan otentikasi dari kode bisnis dengan elegan.
- Otentikasi intersepsi rute - Berdasarkan otentikasi intersepsi rute, mode tenang dapat disesuaikan.
- Sesi - Sesi bersama untuk semua pihak, sesi eksklusif untuk satu pihak, sesi yang disesuaikan, akses mudah ke nilai-nilai.
- Ekstensi lapisan persistensi - Redis dapat diintegrasikan, dan data tidak akan hilang setelah dimulai ulang.
- Pemisahan bagian depan dan belakang - Aplikasi, applet, dan terminal lain yang tidak mendukung cookie juga dapat diautentikasi dengan mudah.
- Kustomisasi gaya Token - enam gaya Token bawaan, Anda juga dapat menyesuaikan strategi pembuatan Token.
- Mode Ingat Saya - Beradaptasi dengan mode [Ingat Saya] dan mulai ulang browser tanpa verifikasi.
- Otentikasi tingkat kedua - Otentikasi lagi berdasarkan login untuk memastikan keamanan.
- Simulasikan akun orang lain - Memanipulasi data status pengguna apa pun secara real time.
- Peralihan identitas sementara - Mengalihkan sementara identitas sesi ke akun lain.
- Login saling eksklusif di ujung yang sama - seperti QQ, ponsel dan komputer online pada saat yang sama, tetapi login saling eksklusif di kedua ponsel.
- Larangan akun - larangan masuk, larangan klasifikasi bisnis, dan larangan tangga hukuman.
- Enkripsi kata sandi - Menyediakan algoritma enkripsi dasar, yang dapat dengan cepat mengenkripsi MD5, SHA1, SHA256 dan AES.
- Kueri sesi - Menyediakan antarmuka kueri sesi yang nyaman dan fleksibel.
- Otentikasi Http Basic - Satu baris kode untuk mengakses otentikasi Http Basic dan Digest.
- Pendengar global - melakukan beberapa operasi AOP selama operasi utama seperti login pengguna, logout, dan dikeluarkan secara offline.
- Filter global - Menangani operasi kelas satu respons keamanan lintas domain dan yang disetel secara global dengan mudah.
- Otentikasi sistem multi-akun - otentikasi terpisah dari beberapa akun dalam satu sistem (seperti tabel Pengguna dan tabel Admin mal)
- Sistem masuk tunggal - Ada tiga mode masuk tunggal bawaan: domain yang sama, lintas domain, Redis yang sama, lintas Redis, pemisahan front-end dan back-end, serta arsitektur lainnya yang dapat ditangani.
- Logout titik tunggal - Memulai logout di subsistem mana pun, dan seluruh sistem akan offline.
- Otentikasi OAuth2.0 - Membangun layanan OAuth2.0 dengan mudah, mendukung mode openid.
- Sesi terdistribusi - Memberikan solusi sesi terdistribusi di pusat data bersama.
- Otentikasi gateway layanan mikro - beradaptasi dengan otentikasi intersepsi rute gateway umum seperti Gateway, ShenYu, Zuul, dan sebagainya.
- Otentikasi panggilan RPC - otentikasi penerusan gateway, otentikasi panggilan RPC, sehingga panggilan layanan tidak lagi berjalan telanjang
- Otentikasi Token Sementara - memecahkan masalah otorisasi Token jangka pendek.
- Redis Independen - memisahkan cache izin dan cache bisnis.
- Otentikasi login cepat cepat - Memasukkan halaman login ke dalam proyek dengan kode nol.
- Dialek tag - Menyediakan paket integrasi dialek tag Thymeleaf dan memberikan contoh integrasi bit.
- integrasi jwt - Menyediakan tiga mode solusi integrasi jwt dan menyediakan kemampuan parameter perluasan token.
- Transfer status panggilan RPC - Menyediakan paket integrasi seperti dubbo dan grpc, sehingga status login tidak hilang selama panggilan RPC.
- Tanda tangan parameter - Menyediakan modul verifikasi tanda tangan panggilan API lintas sistem untuk mencegah gangguan parameter dan meminta pemutaran ulang.
- Perpanjangan otomatis - Dua strategi kedaluwarsa token disediakan, yang dapat digunakan secara fleksibel dan diperbarui secara otomatis.
- Siap digunakan langsung - Menyediakan paket integrasi kerangka kerja umum seperti SpringMVC, WebFlux, Solon, dll., siap digunakan langsung.
- Tumpukan teknologi terbaru - disesuaikan dengan tumpukan teknologi terbaru: mendukung SpringBoot 3.x, jdk 17.
sistem masuk tunggal SSO
SSO Sa-Token dibagi menjadi tiga mode untuk menyelesaikan masalah akses SSO dalam arsitektur berbeda seperti domain yang sama, lintas domain, Redis bersama, lintas Redis, integrasi front-end dan back-end, front-end dan back-end pemisahan...dst.:
Arsitektur sistem | Pola adopsi | Perkenalan | Tautan dokumentasi |
---|
Front-end berada di domain yang sama + back-end berada di domain yang sama dengan Redis | Modus satu | Sesi Sinkronisasi Cookie Bersama | Dokumentasi, contoh |
Domain berbeda di ujung depan + Sama seperti Redis di ujung belakang | Modus 2 | Sesi penyebaran pengalihan URL | Dokumentasi, contoh |
Domain berbeda di ujung depan + Redis berbeda di ujung belakang | Modus ketiga | Permintaan Http untuk mendapatkan sesi | Dokumentasi, contoh |
- Domain front-end yang sama: Artinya, beberapa sistem dapat diterapkan dengan nama domain utama yang sama, seperti:
c1.domain.com
, c2.domain.com
, c3.domain.com
- Backendnya sama dengan Redis: artinya beberapa sistem dapat terhubung ke Redis yang sama. (Ini tidak mengharuskan semua data proyek ditempatkan dalam satu Redis. Sa-Token memberikan solusi
[权限缓存与业务缓存分离]
) - Jika front end maupun back end tidak dapat berada dalam domain yang sama dengan Redis, Anda dapat menggunakan mode tiga, Http meminta tiket verifikasi untuk mendapatkan sesi.
- Contoh mode NoSdk disediakan, dan sistem yang tidak menggunakan Sa-Token juga dapat dihubungkan.
- Menyediakan dokumentasi antarmuka sso-server, dan sistem yang tidak menggunakan bahasa Java juga dapat dihubungkan.
- Menyediakan solusi pemisahan dan integrasi front-end dan back-end: Baik itu sso-server atau sso-client, pemisahan front-end dan back-end dapat diintegrasikan.
- Menyediakan verifikasi keamanan: verifikasi nama domain, verifikasi tiket, verifikasi tanda tangan parameter, secara efektif mencegah pembajakan tiket, permintaan pemutaran ulang, dan serangan lainnya.
- Pencegahan kehilangan parameter: Penulis telah menguji beberapa kerangka kerja SSO, dan semua parameter telah hilang, misalnya sebelum masuk, menjadi:
http://a.com?id=1&name=2
, dan setelah berhasil masuk, menjadi. : http://a.com?id=1
, Sa-Token-SSO memiliki algoritma khusus untuk memastikan bahwa parameter tidak hilang, dan jalur asli dikembalikan secara akurat setelah login berhasil. - Memberikan saran untuk solusi sinkronisasi/migrasi data pengguna: migrasi terpadu sebelum pengembangan, sinkronisasi data real-time selama runtime, pencocokan berdasarkan bidang terkait, pencocokan berdasarkan bidang center_id, dll.
- Memberikan contoh demo yang dapat dijalankan secara langsung untuk membantu Anda dengan cepat memahami proses masuk SSO secara umum.
Otentikasi otorisasi OAuth2
Modul Sa-Token-OAuth2 dibagi menjadi empat mode otorisasi untuk menyelesaikan kebutuhan otorisasi dalam skenario yang berbeda.
Mode otorisasi | Perkenalan |
---|
Kode Otorisasi | Langkah otorisasi standar OAuth2.0, server mentransfer kode ke klien, dan klien menukar kode untuk token otorisasi. |
Implisit | Sebagai opsi cadangan ketika mode kode otorisasi tidak dapat digunakan, server menggunakan pengalihan URL untuk langsung mentransfer token ke halaman klien. |
Kata sandi | Klien secara langsung menukar akun dan kata sandi pengguna dengan token otorisasi. |
Kredensial Klien | Token sisi server untuk tingkat klien, mewakili otorisasi sumber daya aplikasi itu sendiri |
Dokumen referensi terperinci: https://sa-token.cc/doc.html#/oauth2/readme
Kasus integrasi sumber terbuka
- [Snowy]: Platform pengembangan pesat pertama di Tiongkok yang memisahkan rahasia nasional dari sebelum dan sesudah, menggunakan Vue3 + AntDesignVue3 + Vite + SpringBoot + Mp + HuTool + SaToken.
- [ RuoYi-Vue-Plus ]: Tulis ulang semua fungsi RuoYi-Vue dan integrasikan Sa-Token+Mybatis-Plus+Jackson+Xxl-Job+knife4j+Hutool+OSS untuk sinkronisasi reguler
- [Smart-Admin]: SmartAdmin adalah platform pengembangan cepat pertama di Tiongkok untuk middle dan backend dengan "kode berkualitas tinggi" sebagai intinya dan "sederhana, efisien, dan aman";
- [Dengdeng]: Platform pengembangan cepat layanan mikro di tengah dan backend yang berfokus pada solusi multi-penyewa. Mode penyewa mendukung database independen (mode DATASOURCE), arsitektur data bersama (mode KOLOM) dan mode non-penyewa (mode NONE)
- [EasyAdmin]: Sistem manajemen backend berdasarkan SpringBoot2 + Sa-Token + Mybatis-Plus + Snakerflow + Layui. Ini fleksibel dan dapat memisahkan ujung depan dan belakang, atau dapat berupa satu kesatuan generator, manajemen izin, mesin alur kerja, dll.
- [ sa-admin-server ]: Perancah pengembangan manajemen latar belakang berdasarkan sa-admin-ui.
Masih ada lagi kasus open source unggulan yang tidak dapat ditampilkan satu per satu, silakan merujuk ke: Awesome-Sa-Token
Tautan ramah
- [ OkHttps ]: kerangka komunikasi http ringan, API yang sangat elegan, mendukung protokol WebSocket dan Stomp
- [Bean Searcher]: ORM read-only yang berfokus pada kueri tingkat lanjut, memungkinkan pengambilan daftar kompleks dengan satu baris kode!
- [Jpom]: Konstruksi online yang sederhana dan ringan dan tidak mengganggu, penerapan otomatis, pengoperasian dan pemeliharaan harian, serta perangkat lunak pemantauan proyek.
- [TLog]: Artefak pelacakan tag log terdistribusi yang ringan.
- [hippo4j]: Kerangka kerja kumpulan thread dinamis yang kuat dengan fungsi pemantauan dan alarm.
- [ hertzbeat ]: Sistem pemantauan dan alarm real-time open source yang mudah digunakan dan ramah, tidak memerlukan Agen, cluster berkinerja tinggi, dan kemampuan pemantauan khusus yang kuat.
- [Solon]: Kerangka pengembangan aplikasi yang lebih modern: lebih cepat, lebih kecil, dan lebih gratis.
- [Chat2DB]: Manajemen basis data berbasis AI dan alat BI yang mendukung pengelolaan 22 basis data seperti Mysql, pg, Oracle, dan Redis.
Hosting kode
- Gitee: https://gitee.com/dromara/sa-token
- GitHub: https://github.com/dromara/sa-token
- Kode Git: https://gitcode.com/dromara/sa-token
Kelompok komunikasi
Grup komunikasi QQ: 823181187 Klik untuk bergabung
Grup komunikasi WeChat:
(Pindai kode QR untuk menambahkan WeChat, catatan: sa-token, undang Anda untuk bergabung dalam obrolan grup)
Keuntungan bergabung dalam obrolan grup:
- Terima pemberitahuan pembaruan kerangka kerja sesegera mungkin.
- Terima pemberitahuan bug kerangka kerja sesegera mungkin.
- Terima pemberitahuan tentang kasus sumber terbuka baru sesegera mungkin.
- Berkomunikasi (mō yú) satu sama lain (huá shuǐ) dengan banyak orang besar.