สาโทเค็น v1.39.0
เฟรมเวิร์กการตรวจสอบสิทธิ์ Java แบบน้ำหนักเบาที่ทำให้การตรวจสอบสิทธิ์ทำได้ง่ายและสวยงาม!
เอกสารออนไลน์: https://sa-token.cc
บทนำ Sa-Token
Sa-Token เป็นเฟรมเวิร์กการตรวจสอบสิทธิ์ Java แบบน้ำหนักเบา ซึ่งปัจจุบันมีโมดูลหลัก 5 โมดูล ได้แก่ การตรวจสอบสิทธิ์การเข้าสู่ระบบ การตรวจสอบสิทธิ์ การลงชื่อเพียงครั้งเดียว OAuth2.0 และการตรวจสอบสิทธิ์ไมโครเซอร์วิส
การแสดงตัวอย่างง่ายๆ: (คลิกเพื่อขยาย/ยุบ)
Sa-Token มุ่งหวังที่จะทำให้ส่วนการตรวจสอบสิทธิ์ของระบบเสร็จสมบูรณ์ด้วยวิธีที่เรียบง่ายและสวยงาม คุณต้องการเพียง:
// 会话登录,参数填登录人的账号id
StpUtil . login ( 10001 );
ไม่จำเป็นต้องใช้อินเทอร์เฟซใดๆ หรือสร้างไฟล์การกำหนดค่าใดๆ คุณเพียงแค่ต้องเรียกโค้ดแบบคงที่นี้เพื่อทำการตรวจสอบสิทธิ์การเข้าสู่ระบบเซสชันให้เสร็จสมบูรณ์
หากอินเทอร์เฟซต้องการการเข้าสู่ระบบเพื่อเข้าถึง เราจำเป็นต้องเรียกรหัสต่อไปนี้เท่านั้น:
// 校验当前客户端是否已经登录,如果未登录则抛出 `NotLoginException` 异常
StpUtil . checkLogin ();
ใน Sa-Token ฟังก์ชันส่วนใหญ่สามารถแก้ไขได้ด้วยโค้ดหนึ่งบรรทัด:
เตะคนออฟไลน์:
// 将账号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 ( "/**" );
เมื่อคุณเบื่อหน่ายกับ Shiro, SpringSecurity และเฟรมเวิร์กอื่น ๆ คุณจะเข้าใจว่าการออกแบบ API ของ Sa-Token ที่เรียบง่ายและสวยงามเพียงใดเมื่อเปรียบเทียบกับเฟรมเวิร์กเก่าแบบดั้งเดิมเหล่านี้!
รายการโมดูลหลัก: (คลิกเพื่อขยาย/ยุบ)
- การตรวจสอบสิทธิ์การเข้าสู่ระบบ - การเข้าสู่ระบบแบบปลายเดียว การเข้าสู่ระบบแบบหลายจุด การเข้าสู่ระบบแบบเอกสิทธิ์เฉพาะบุคคลแบบเดียวกัน ไม่จำเป็นต้องเข้าสู่ระบบภายในเจ็ดวัน
- การตรวจสอบสิทธิ์ - การตรวจสอบสิทธิ์, การตรวจสอบบทบาท, การตรวจสอบสิทธิ์รองของเซสชัน
- เตะคนออฟไลน์ - เตะคนออฟไลน์ตามรหัสบัญชีของพวกเขา และเตะคนออฟไลน์ตามมูลค่าโทเค็นของพวกเขา
- การรับรองความถูกต้องตามคำอธิบายประกอบ - แยกการรับรองความถูกต้องออกจากรหัสธุรกิจอย่างหรูหรา
- การตรวจสอบการสกัดกั้นเส้นทาง - ขึ้นอยู่กับการตรวจสอบการสกัดกั้นเส้นทาง โหมดพักผ่อนสามารถปรับได้
- เซสชัน - เซสชันที่ใช้ร่วมกันสำหรับทุกส่วน เซสชันพิเศษสำหรับปลายด้านหนึ่ง เซสชันที่กำหนดเอง การเข้าถึงค่าต่างๆ ได้อย่างสะดวก
- ส่วนขยายเลเยอร์คงอยู่ - สามารถรวม Redis ได้ และข้อมูลจะไม่สูญหายหลังจากรีสตาร์ท
- การแยกส่วนหน้าและส่วนหลัง - สามารถตรวจสอบสิทธิ์แอป แอปเพล็ต และเทอร์มินัลอื่นๆ ที่ไม่รองรับคุกกี้ได้อย่างง่ายดาย
- การปรับแต่งสไตล์โทเค็น - สไตล์โทเค็นในตัวหกสไตล์ คุณยังสามารถปรับแต่งกลยุทธ์การสร้างโทเค็นได้
- โหมดจดจำฉัน - ปรับเป็นโหมด [จดจำฉัน] และรีสตาร์ทเบราว์เซอร์โดยไม่ต้องมีการตรวจสอบ
- การรับรองความถูกต้องระดับที่สอง - การรับรองความถูกต้องอีกครั้งตามการเข้าสู่ระบบเพื่อความปลอดภัย
- จำลองบัญชีของผู้อื่น - จัดการข้อมูลสถานะผู้ใช้แบบเรียลไทม์
- สลับข้อมูลระบุตัวตนชั่วคราว - สลับข้อมูลระบุตัวตนของเซสชันเป็นบัญชีอื่นชั่วคราว
- การเข้าสู่ระบบแบบเอกสิทธิ์เฉพาะบุคคลในจุดเดียวกัน - เช่น QQ โทรศัพท์มือถือและคอมพิวเตอร์ออนไลน์พร้อมกัน แต่การเข้าสู่ระบบจะไม่เกิดขึ้นพร้อมกันบนโทรศัพท์มือถือสองเครื่อง
- การแบนบัญชี - การแบนการเข้าสู่ระบบ การแบนการจัดประเภทธุรกิจ และการแบนขั้นบันไดการลงโทษ
- การเข้ารหัสรหัสผ่าน - มีอัลกอริธึมการเข้ารหัสพื้นฐาน ซึ่งสามารถเข้ารหัส MD5, SHA1, SHA256 และ AES ได้อย่างรวดเร็ว
- การสืบค้นเซสชัน - จัดเตรียมอินเทอร์เฟซการสืบค้นเซสชันที่สะดวกและยืดหยุ่น
- การตรวจสอบสิทธิ์ Http Basic - รหัสหนึ่งบรรทัดเพื่อเข้าถึงการตรวจสอบสิทธิ์ Http Basic และ Digest
- Global Listener - ดำเนินการ AOP บางอย่างระหว่างการดำเนินการหลัก เช่น การเข้าสู่ระบบของผู้ใช้ ออกจากระบบ และถูกเตะแบบออฟไลน์
- ตัวกรองส่วนกลาง - จัดการข้ามโดเมนได้อย่างสะดวกและตั้งค่าการดำเนินการตอบสนองความปลอดภัยระดับเฟิร์สคลาสทั่วโลก
- การตรวจสอบระบบหลายบัญชี - แยกการตรวจสอบบัญชีหลายบัญชีในระบบเดียว (เช่น ตาราง User และตารางผู้ดูแลระบบของห้างสรรพสินค้า)
- การลงชื่อเพียงครั้งเดียว - มีโหมดการลงชื่อเข้าใช้ครั้งเดียวในตัวสามโหมด: โดเมนเดียวกัน ข้ามโดเมน Redis เดียวกัน cross-Redis การแยกส่วนหน้าและส่วนหลัง และสถาปัตยกรรมอื่นๆ สามารถจัดการได้
- การล็อกเอาต์แบบจุดเดียว - เริ่มต้นการล็อกเอาต์ในระบบย่อยใดๆ และทั้งระบบจะออฟไลน์
- การรับรองความถูกต้อง OAuth2.0 - สร้างบริการ OAuth2.0 ได้อย่างง่ายดาย รองรับโหมด openid
- เซสชันแบบกระจาย - มอบโซลูชันเซสชันแบบกระจายในศูนย์ข้อมูลที่ใช้ร่วมกัน
- การรับรองความถูกต้องเกตเวย์ Microservice - ปรับให้เข้ากับการตรวจสอบการสกัดกั้นเส้นทางของเกตเวย์ทั่วไป เช่น เกตเวย์, ShenYu, Zuul เป็นต้น
- การตรวจสอบการโทร RPC - การตรวจสอบการส่งต่อเกตเวย์ การตรวจสอบการโทร RPC เพื่อให้การเรียกใช้บริการไม่ทำงานอีกต่อไป
- การรับรองความถูกต้อง Token ชั่วคราว - แก้ปัญหาการอนุญาต Token ระยะสั้น
- Redis อิสระ - แยกแคชการอนุญาตและแคชธุรกิจ
- การรับรองความถูกต้องเข้าสู่ระบบอย่างรวดเร็วอย่างรวดเร็ว - แทรกหน้าเข้าสู่ระบบในโครงการด้วยรหัสศูนย์
- ภาษาแท็ก - จัดเตรียมแพ็คเกจการรวมภาษาแท็ก Thymeleaf และจัดเตรียมตัวอย่างการรวม beetl
- การรวม jwt - จัดเตรียมโซลูชันการรวม jwt สามโหมด และจัดเตรียมความสามารถพารามิเตอร์ส่วนขยายโทเค็น
- การถ่ายโอนสถานะการโทร RPC - จัดเตรียมแพ็คเกจการรวม เช่น dubbo และ grpc เพื่อให้สถานะการเข้าสู่ระบบไม่สูญหายระหว่างการโทร RPC
- ลายเซ็นพารามิเตอร์ - จัดเตรียมโมดูลการตรวจสอบลายเซ็นการเรียก API ข้ามระบบเพื่อป้องกันการดัดแปลงพารามิเตอร์และขอเล่นซ้ำ
- การต่ออายุอัตโนมัติ - มีกลยุทธ์การหมดอายุโทเค็นสองแบบ ซึ่งสามารถใช้งานได้อย่างยืดหยุ่นและต่ออายุอัตโนมัติ
- พร้อมใช้งานทันทีตั้งแต่แกะกล่อง - มอบแพ็คเกจการรวมเฟรมเวิร์กทั่วไป เช่น SpringMVC, WebFlux, Solon ฯลฯ ที่พร้อมใช้งานทันทีตั้งแต่แกะกล่อง
- กลุ่มเทคโนโลยีล่าสุด - ปรับให้เข้ากับกลุ่มเทคโนโลยีล่าสุด: รองรับ SpringBoot 3.x, jdk 17
การลงชื่อเพียงครั้งเดียวของ SSO
Sa-Token SSO แบ่งออกเป็นสามโหมดเพื่อแก้ไขปัญหาการเข้าถึง SSO ภายใต้สถาปัตยกรรมที่แตกต่างกัน เช่น โดเมนเดียวกัน ข้ามโดเมน Redis ที่ใช้ร่วมกัน Cross-Redis การรวมส่วนหน้าและส่วนหลัง ส่วนหน้าและส่วนหลัง การแยกจากกัน...ฯลฯ:
สถาปัตยกรรมระบบ | รูปแบบการรับเลี้ยงบุตรบุญธรรม | การแนะนำ | ลิงค์เอกสาร |
---|
ส่วนหน้าอยู่ในโดเมนเดียวกัน + ส่วนหลังอยู่ในโดเมนเดียวกันกับ Redis | โหมดที่หนึ่ง | เซสชันการซิงค์คุกกี้ที่ใช้ร่วมกัน | เอกสารประกอบตัวอย่าง |
โดเมนที่แตกต่างกันในส่วนหน้า + เหมือนกับ Redis ที่ส่วนหลัง | โหมด 2 | การเปลี่ยนเส้นทาง URL เผยแพร่เซสชัน | เอกสารประกอบตัวอย่าง |
โดเมนต่างกันที่ส่วนหน้า + Redis ต่างกันที่ส่วนหลัง | โหมดที่สาม | คำขอ HTTP เพื่อรับเซสชัน | เอกสารประกอบตัวอย่าง |
- โดเมนส่วนหน้าเดียวกัน: หมายความว่าสามารถใช้งานหลายระบบได้ภายใต้ชื่อโดเมนหลักเดียวกัน เช่น:
c1.domain.com
, c2.domain.com
, c3.domain.com
- แบ็กเอนด์เหมือนกับ Redis ซึ่งหมายความว่าหลายระบบสามารถเชื่อมต่อกับ Redis เดียวกันได้ (ซึ่งไม่จำเป็นต้องวางข้อมูลโครงการทั้งหมดไว้ใน Redis เดียว Sa-Token มอบโซลูชันของ
[权限缓存与业务缓存分离]
) - หากทั้งส่วนหน้าและส่วนหลังไม่สามารถอยู่ในโดเมนเดียวกันกับ Redis ได้ คุณสามารถใช้โหมดที่สาม โดยใช้ 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 แบ่งออกเป็นโหมดการอนุญาตสี่โหมด เพื่อแก้ไขความต้องการการอนุญาตในสถานการณ์ที่แตกต่างกัน
โหมดการอนุญาต | การแนะนำ |
---|
รหัสการอนุญาต | ขั้นตอนการอนุญาตมาตรฐาน 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
มีกรณีโอเพ่นซอร์สที่ยอดเยี่ยมอีกมากมายที่ไม่สามารถแสดงทีละกรณีได้ โปรดดูที่: Awesome-Sa-Token
ลิงค์ที่เป็นมิตร
- [ OkHttps ]: กรอบการสื่อสาร http น้ำหนักเบา, API ที่หรูหราอย่างยิ่ง, รองรับโปรโตคอล WebSocket และ Stomp
- [Bean Searcher]: ORM แบบอ่านอย่างเดียวที่เน้นไปที่การสืบค้นขั้นสูง ทำให้สามารถเรียกค้นรายการที่ซับซ้อนได้ด้วยโค้ดเพียงบรรทัดเดียว!
- [Jpom]: การสร้างออนไลน์ที่เรียบง่ายและมีน้ำหนักเบา การรบกวนต่ำ การปรับใช้อัตโนมัติ การดำเนินงานและการบำรุงรักษารายวัน และซอฟต์แวร์ตรวจสอบโครงการ
- [TLog]: สิ่งประดิษฐ์การติดตามแท็กบันทึกแบบกระจายแบบน้ำหนักเบา
- [hippo4j]: เฟรมเวิร์กเธรดพูลไดนามิกที่ทรงพลังพร้อมฟังก์ชันการตรวจสอบและการเตือน
- [ เฮิรตซ์บีท ]: ระบบตรวจสอบและแจ้งเตือนแบบเรียลไทม์แบบโอเพ่นซอร์สที่ใช้งานง่ายและเป็นมิตร ไม่ต้องใช้เอเจนต์ คลัสเตอร์ประสิทธิภาพสูง และความสามารถในการตรวจสอบแบบกำหนดเองอันทรงพลัง
- [Solon]: กรอบการพัฒนาแอปพลิเคชันที่ทันสมัยยิ่งขึ้น: เร็วขึ้น ขนาดเล็กลง และฟรีมากขึ้น
- [Chat2DB]: การจัดการฐานข้อมูลที่ขับเคลื่อนด้วย AI และเครื่องมือ BI ที่รองรับการจัดการฐานข้อมูล 22 รายการ เช่น Mysql, pg, Oracle และ Redis
รหัสโฮสติ้ง
- ผู้เขียน: 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Đ) กับหนุ่มใหญ่หลายคน