Sa-토큰 v1.39.0
인증을 간단하고 우아하게 만들어주는 경량 Java 권한 인증 프레임워크!
온라인 문서: https://sa-token.cc
Sa-Token 소개
Sa-Token은 현재 로그인 인증, 권한 인증, Single Sign-On, OAuth2.0 및 마이크로서비스 인증의 5가지 핵심 모듈이 있는 경량 Java 권한 인증 프레임워크입니다.
간단한 예시 디스플레이: (확대/축소하려면 클릭)
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 및 기타 프레임워크에 싫증이 나면 Sa-Token의 API 디자인이 기존의 기존 프레임워크와 비교하여 얼마나 단순하고 우아한지 이해하게 될 것입니다!
핵심 모듈 목록: (확장/축소하려면 클릭)
- 로그인 인증 - 단일 엔드 로그인, 멀티 엔드 로그인, 동일 엔드 상호 배타적 로그인, 7일 이내에는 로그인이 필요하지 않습니다.
- 권한 인증 - 권한 인증, 역할 인증, 세션 보조 인증.
- 사람들을 오프라인으로 추방 - 계정 ID를 기준으로 사람들을 오프라인으로 추방하고, 토큰 가치를 기준으로 사람들을 오프라인으로 추방합니다.
- 주석 기반 인증 - 인증을 비즈니스 코드와 우아하게 분리합니다.
- 경로 차단 인증 - 경로 차단 인증을 기반으로 Restful 모드를 적용할 수 있습니다.
- 세션 - 모든 끝을 위한 공유 세션, 한쪽 끝을 위한 독점 세션, 맞춤형 세션, 가치에 대한 편리한 접근.
- 지속성 계층 확장 - Redis를 통합할 수 있으며 다시 시작해도 데이터가 손실되지 않습니다.
- 프런트엔드와 백엔드 분리 - 쿠키를 지원하지 않는 앱, 애플릿, 기타 단말기도 쉽게 인증할 수 있습니다.
- 토큰 스타일 사용자 정의 - 6가지 기본 제공 토큰 스타일, 토큰 생성 전략을 사용자 정의할 수도 있습니다.
- 기억하기 모드 - [기억하기] 모드에 적응하고 확인 없이 브라우저를 다시 시작합니다.
- 2차 인증 - 보안 확보를 위해 로그인 기반으로 다시 인증합니다.
- 다른 사람의 계정 시뮬레이션 - 사용자 상태 데이터를 실시간으로 조작합니다.
- 임시 ID 전환 - 세션 ID를 일시적으로 다른 계정으로 전환합니다.
- 동일 엔드 상호 배타적 로그인 - QQ와 마찬가지로 휴대폰과 컴퓨터가 동시에 온라인 상태이지만 로그인은 두 휴대폰에서 상호 배타적입니다.
- 계정 차단 - 로그인 차단, 업종 분류 차단, 처벌 사다리 차단.
- 비밀번호 암호화 - MD5, SHA1, SHA256 및 AES를 빠르게 암호화할 수 있는 기본 암호화 알고리즘을 제공합니다.
- 세션 쿼리 - 편리하고 유연한 세션 쿼리 인터페이스를 제공합니다.
- Http 기본 인증 - Http 기본 및 다이제스트 인증에 액세스하기 위한 한 줄의 코드입니다.
- 전역 리스너 - 사용자 로그인, 로그아웃 및 오프라인 추방과 같은 주요 작업 중에 일부 AOP 작업을 수행합니다.
- 글로벌 필터 - 도메인 간 및 전역적으로 설정된 보안 응답 최고 수준의 작업을 편리하게 처리합니다.
- 다중 계정 시스템 인증 - 하나의 시스템에서 여러 계정에 대한 별도 인증(몰의 User 테이블, Admin 테이블 등)
- 싱글 사인온(Single sign-on ) - 싱글 사인온(Single Sign-On) 모드가 3가지 내장되어 있습니다. 즉, 동일한 도메인, 교차 도메인, 동일한 Redis, 교차 Redis, 프런트엔드 및 백엔드 분리 및 기타 아키텍처를 처리할 수 있습니다.
- 단일 지점 로그아웃 - 모든 하위 시스템에서 로그아웃을 시작하면 전체 시스템이 오프라인이 됩니다.
- OAuth2.0 인증 - openid 모드를 지원하는 OAuth2.0 서비스를 쉽게 구축할 수 있습니다.
- 분산 세션 - 공유 데이터 센터에서 분산 세션 솔루션을 제공합니다.
- 마이크로서비스 게이트웨이 인증 - Gateway, ShenYu, Zuul 등과 같은 일반 게이트웨이의 경로 차단 인증에 적응합니다.
- RPC 호출 인증 - 게이트웨이 전달 인증, RPC 호출 인증을 통해 서비스 호출이 더 이상 그대로 실행되지 않습니다.
- 임시 토큰 인증 - 단기 토큰 인증 문제를 해결합니다.
- 독립 Redis - 권한 캐시와 비즈니스 캐시를 분리합니다.
- 빠른 빠른 로그인 인증 - 제로 코드로 프로젝트에 로그인 페이지를 삽입합니다.
- 태그 방언 - Thymeleaf 태그 방언 통합 패키지를 제공하고 딱정벌레 통합 예제를 제공합니다.
- jwt 통합 - jwt 통합 솔루션의 세 가지 모드를 제공하고 토큰 확장 매개변수 기능을 제공합니다.
- RPC 호출 상태 전송 - RPC 호출 중에 로그인 상태가 손실되지 않도록 dubbo, grpc 등의 통합 패키지를 제공합니다.
- 매개변수 서명 - 매개변수 변조를 방지하고 재생을 요청하기 위해 시스템 간 API 호출 서명 확인 모듈을 제공합니다.
- 자동 갱신 - 유연하게 자동 갱신할 수 있는 두 가지 토큰 만료 전략이 제공됩니다.
- 즉시 사용 가능 - SpringMVC, WebFlux, Solon 등과 같은 공통 프레임워크 통합 패키지를 즉시 사용할 수 있도록 제공합니다.
- 최신 기술 스택 - 최신 기술 스택에 맞게 조정: SpringBoot 3.x, jdk 17을 지원합니다.
SSO 싱글 사인온
Sa-Token SSO는 동일 도메인, 교차 도메인, 공유 Redis, 교차 Redis, 프런트엔드 및 백엔드 통합, 프런트엔드 및 백엔드와 같은 다양한 아키텍처에서 SSO 액세스 문제를 해결하기 위해 세 가지 모드로 구분됩니다. 분리...등:
시스템 아키텍처 | 채택 패턴 | 소개 | 문서 링크 |
---|
프런트엔드는 동일한 도메인에 있고 백엔드는 Redis와 동일한 도메인에 있습니다. | 모드 1 | 공유 쿠키 동기화 세션 | 문서, 예시 |
프런트엔드의 다른 도메인 + 백엔드의 Redis와 동일 | 모드 2 | URL 리디렉션이 세션을 전파함 | 문서, 예시 |
프런트엔드의 다른 도메인 + 백엔드의 다른 Redis | 모드 3 | 세션을 가져오기 위한 HTTP 요청 | 문서, 예시 |
- 프런트엔드 동일 도메인:
c1.domain.com
, c2.domain.com
, c3.domain.com
과 같이 동일한 기본 도메인 이름으로 여러 시스템을 배포할 수 있음을 의미합니다. - 백엔드는 Redis와 동일합니다. 이는 여러 시스템이 동일한 Redis에 연결할 수 있음을 의미합니다. (모든 프로젝트 데이터를 하나의 Redis에 배치할 필요는 없습니다. Sa-Token은
[权限缓存与业务缓存分离]
솔루션을 제공합니다.) - 프런트엔드와 백엔드 모두 Redis와 동일한 도메인에 있을 수 없는 경우 모드 3인 Http 요청 확인 티켓을 사용하여 세션을 얻을 수 있습니다.
- NoSdk 모드의 예시가 제공되며, Sa-Token을 사용하지 않는 시스템도 연결이 가능합니다.
- SSO-서버 인터페이스 문서를 제공하며, Java 언어를 사용하지 않는 시스템도 연결할 수 있습니다.
- 프런트엔드와 백엔드 분리 및 통합 솔루션 제공: sso-server든 sso-client든 프런트엔드와 백엔드 분리를 모두 통합할 수 있습니다.
- 보안 확인 제공: 도메인 이름 확인, 티켓 확인, 매개변수 서명 확인, 티켓 하이재킹, 요청 재생 및 기타 공격을 효과적으로 방지합니다.
- 매개변수 손실 방지: 작성자는 여러 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를 기반으로 한 백그라운드 관리 개발 스캐폴딩입니다.
하나씩 표시할 수 없는 우수한 오픈소스 사례가 더 있습니다. Awesome-Sa-Token을 참조하세요.
친절한 링크
- [ OkHttps ]: 경량 http 통신 프레임워크, 매우 우아한 API, WebSocket 및 Stomp 프로토콜 지원
- [Bean Searcher]: 고급 쿼리에 초점을 맞춘 읽기 전용 ORM으로, 한 줄의 코드로 복잡한 목록 검색이 가능합니다!
- [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 커뮤니케이션 그룹:
(WeChat을 추가하려면 QR 코드를 스캔하세요. 참고: sa-token, 그룹 채팅에 참여하도록 초대합니다.)
그룹 채팅에 참여하면 얻을 수 있는 이점:
- 가능한 한 빨리 프레임워크 업데이트 알림을 받으세요.
- 가능한 한 빨리 프레임워크 버그 알림을 받으세요.
- 새로운 오픈소스 사례에 대한 알림을 최대한 빨리 받아보세요.
- 많은 큰 놈들과 서로 화수(結수)로 소통(比休)한다.