Sa-Token v1.39.0
¡Un marco ligero de autenticación de permisos de Java que hace que la autenticación sea simple y elegante!
Documentación en línea: https://sa-token.cc
Introducción al token Sa
Sa-Token es un marco ligero de autenticación de permisos de Java que actualmente tiene cinco módulos principales: autenticación de inicio de sesión, autenticación de permisos, inicio de sesión único, OAuth2.0 y autenticación de microservicios.
Visualización de ejemplo simple: (haga clic para expandir/contraer)
Sa-Token tiene como objetivo completar la parte de autenticación de permisos del sistema de una manera simple y elegante. Tomando como ejemplo la autenticación de inicio de sesión, solo necesita:
// 会话登录,参数填登录人的账号id
StpUtil . login ( 10001 );
No es necesario implementar ninguna interfaz ni crear ningún archivo de configuración. Solo necesita llamar a este código estático para completar la autenticación de inicio de sesión.
Si una interfaz requiere iniciar sesión para acceder, solo necesitamos llamar al siguiente código:
// 校验当前客户端是否已经登录,如果未登录则抛出 `NotLoginException` 异常
StpUtil . checkLogin ();
En Sa-Token, la mayoría de las funciones se pueden resolver con una línea de código:
Desconectar a la gente:
// 将账号id为 10077 的会话踢下线
StpUtil . kickout ( 10077 );
Autenticación de permiso:
// 注解鉴权:只有具备 `user:add` 权限的会话才可以进入方法
@ SaCheckPermission ( "user:add" )
public String insert ( SysUser user ) {
// ...
return "用户增加" ;
}
Autenticación de interceptación de ruta:
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 ( "/**" );
Cuando esté harto de Shiro, SpringSecurity y otros marcos, comprenderá cuán simple y elegante es el diseño de API de Sa-Token en comparación con estos antiguos marcos tradicionales.
Lista de módulos principales: (haga clic para expandir/contraer)
- Autenticación de inicio de sesión : inicio de sesión de un solo extremo, inicio de sesión de múltiples extremos, inicio de sesión mutuamente excluyente del mismo extremo, no es necesario iniciar sesión dentro de los siete días.
- Autenticación de permisos : autenticación de autoridad, autenticación de roles, autenticación secundaria de sesión.
- Expulsar a las personas : expulsar a las personas según su ID de cuenta y expulsar a las personas según su valor de Token.
- Autenticación basada en anotaciones : separa elegantemente la autenticación del código comercial.
- Autenticación de intercepción de ruta : según la autenticación de intercepción de ruta, se puede adaptar el modo de descanso.
- Sesión : sesión compartida para todos los fines, sesión exclusiva para un extremo, sesión personalizada, acceso conveniente a los valores.
- Extensión de la capa de persistencia : se puede integrar Redis y los datos no se perderán después de reiniciar.
- Separación de front-end y backend : las aplicaciones, subprogramas y otros terminales que no admiten cookies también se pueden autenticar fácilmente.
- Personalización del estilo de token : seis estilos de token integrados; también puede personalizar la estrategia de generación de token.
- Modo Recordarme : adáptese al modo [Recordarme] y reinicie el navegador sin verificación.
- Autenticación de segundo nivel : autenticación nuevamente basada en el inicio de sesión para garantizar la seguridad.
- Simule las cuentas de otras personas : manipule los datos de estado de cualquier usuario en tiempo real.
- Cambio de identidad temporal : cambie temporalmente la identidad de la sesión a otra cuenta.
- Inicio de sesión mutuamente excluyente en el mismo extremo : como QQ, el teléfono móvil y la computadora están en línea al mismo tiempo, pero el inicio de sesión es mutuamente excluyente en los dos teléfonos móviles.
- Prohibición de cuentas : prohibición de inicio de sesión, prohibición de clasificación empresarial y prohibición de escala de castigo.
- Cifrado de contraseña : proporciona algoritmos de cifrado básicos que pueden cifrar rápidamente MD5, SHA1, SHA256 y AES.
- Consulta de sesión : proporciona una interfaz de consulta de sesión conveniente y flexible.
- Autenticación Http básica : una línea de código para acceder a la autenticación Http básica y Digest.
- Oyente global : realiza algunas operaciones de AOP durante operaciones clave, como el inicio y cierre de sesión del usuario y su expulsión.
- Filtro global : maneja cómodamente operaciones de primera clase de respuesta de seguridad entre dominios y configuradas globalmente.
- Autenticación del sistema de cuentas múltiples : autenticación separada de varias cuentas en un sistema (como la tabla de usuarios y la tabla de administradores del centro comercial)
- Inicio de sesión único : hay tres modos de inicio de sesión único integrados: mismo dominio, dominio cruzado, mismo Redis, Redis cruzado, separación de front-end y back-end y se pueden manejar otras arquitecturas.
- Cierre de sesión en un solo punto : inicie un cierre de sesión en cualquier subsistema y todo el sistema estará fuera de línea.
- Autenticación OAuth2.0 : cree fácilmente servicios OAuth2.0, compatibles con el modo openid.
- Sesión distribuida : proporciona una solución de sesión distribuida en un centro de datos compartido.
- Autenticación de puerta de enlace de microservicio : se adapta a la autenticación de interceptación de rutas de puertas de enlace comunes como Gateway, ShenYu, Zuul, etc.
- Autenticación de llamadas RPC : autenticación de reenvío de puerta de enlace, autenticación de llamadas RPC, para que las llamadas de servicio ya no se ejecuten desnudas
- Autenticación de token temporal : resuelve problemas de autorización de token a corto plazo.
- Redis independiente : separa la caché de permisos y la caché empresarial.
- Autenticación de inicio de sesión rápida : inserte una página de inicio de sesión en el proyecto sin código.
- Dialecto de etiquetas : proporciona el paquete de integración del dialecto de etiquetas Thymeleaf y proporciona ejemplos de integración de Beetl.
- Integración jwt : proporciona tres modos de soluciones de integración jwt y proporciona capacidades de parámetros de expansión de tokens.
- Transferencia de estado de llamada RPC : proporciona paquetes de integración como dubbo y grpc, para que el estado de inicio de sesión no se pierda durante las llamadas RPC.
- Firma de parámetros : proporciona un módulo de verificación de firma de llamadas API entre sistemas para evitar la manipulación de parámetros y la reproducción de solicitudes.
- Renovación automática : se proporcionan dos estrategias de vencimiento de tokens, que pueden usarse de manera flexible y renovarse automáticamente.
- Listo para usar de inmediato : proporciona paquetes de integración de marcos comunes, como SpringMVC, WebFlux, Solon, etc., listos para usar de inmediato.
- La última pila de tecnología , adaptada a la última pila de tecnología: admite SpringBoot 3.x, jdk 17.
Inicio de sesión único SSO
Sa-Token SSO se divide en tres modos para resolver problemas de acceso a SSO bajo diferentes arquitecturas, como mismo dominio, entre dominios, Redis compartido, Redis cruzado, integración front-end y back-end, front-end y back-end. separación...etc.:
Arquitectura del sistema | Patrón de adopción | Introducción | Enlace de documentación |
---|
El front-end está en el mismo dominio + el back-end está en el mismo dominio que Redis | Modo uno | Sesión de sincronización de cookies compartida | Documentación, ejemplos. |
Diferentes dominios en el front-end + Igual que Redis en el back-end | Modo 2 | La redirección de URL propaga la sesión | Documentación, ejemplos. |
Diferentes dominios en el front-end + diferentes Redis en el back-end | Modo tres | Solicitud HTTP para obtener sesión. | Documentación, ejemplos. |
- Front-end mismo dominio: significa que se pueden implementar varios sistemas bajo el mismo nombre de dominio principal, como:
c1.domain.com
, c2.domain.com
, c3.domain.com
- El backend es el mismo que el de Redis: significa que varios sistemas pueden conectarse al mismo Redis. (Esto no requiere que todos los datos del proyecto se coloquen en un Redis. Sa-Token proporciona una solución de
[权限缓存与业务缓存分离]
) - Si ni el front-end ni el back-end pueden estar en el mismo dominio que Redis, puede utilizar el modo tres, ticket de verificación de solicitud HTTP para obtener la sesión.
- Se proporciona un ejemplo del modo NoSdk y también se pueden conectar sistemas que no utilizan Sa-Token.
- Proporcione documentación de la interfaz del servidor sso y también se pueden conectar sistemas que no utilizan el lenguaje Java.
- Proporciona soluciones de integración y separación de front-end y back-end: ya sea sso-server o sso-client, se pueden integrar tanto la separación de front-end como la de back-end.
- Proporciona verificación de seguridad: verificación de nombre de dominio, verificación de tickets, verificación de firma de parámetros, lo que previene eficazmente el secuestro de tickets, la reproducción de solicitudes y otros ataques.
- Prevención de pérdida de parámetros: el autor ha probado varios marcos de SSO y se han perdido todos los parámetros. Por ejemplo, antes de iniciar sesión, era:
http://a.com?id=1&name=2
, y después de iniciar sesión correctamente, se convirtió. : http://a.com?id=1
, Sa-Token-SSO tiene un algoritmo especial para garantizar que los parámetros no se pierdan y que la ruta original se devuelva con precisión después de iniciar sesión correctamente. - Proporcione sugerencias para soluciones de sincronización/migración de datos de usuario: migración unificada antes del desarrollo, sincronización de datos en tiempo real durante el tiempo de ejecución, coincidencia basada en campos asociados, coincidencia basada en campos center_id, etc.
- Proporciona ejemplos de demostración ejecutables directamente para ayudarle a familiarizarse rápidamente con el proceso general de inicio de sesión de SSO.
Autenticación de autorización OAuth2
El módulo Sa-Token-OAuth2 se divide en cuatro modos de autorización para resolver las necesidades de autorización en diferentes escenarios.
Modo de autorización | Introducción |
---|
Código de autorización | Paso de autorización estándar de OAuth2.0, el servidor transfiere el código al cliente y el cliente intercambia el código por el token de autorización. |
Implícito | Como opción de respaldo cuando no se puede usar el modo de código de autorización, el servidor usa la redirección de URL para transferir directamente el token a la página del cliente. |
Contraseña | El Cliente intercambia directamente la cuenta y la contraseña del usuario por el token de autorización. |
Credenciales de cliente | Token del lado del servidor para el nivel del cliente, que representa la autorización de recursos propios de la aplicación |
Documento de referencia detallado: https://sa-token.cc/doc.html#/oauth2/readme
Caso de integración de código abierto
- [Snowy]: la primera plataforma de desarrollo rápido de China que separa los secretos nacionales del antes y el después, utilizando Vue3 + AntDesignVue3 + Vite + SpringBoot + Mp + HuTool + SaToken.
- [RuoYi-Vue-Plus]: reescribe todas las funciones de RuoYi-Vue e integra Sa-Token+Mybatis-Plus+Jackson+Xxl-Job+knife4j+Hutool+OSS para una sincronización regular
- [Smart-Admin]: SmartAdmin es la primera plataforma de desarrollo rápido de China para el middle y backend con "código de alta calidad" como núcleo y "simple, eficiente y segura";
- [Dengdeng]: una plataforma de desarrollo rápido de microservicios de backend y mid-end que se centra en soluciones multiinquilino. El modo inquilino admite bases de datos independientes (modo FUENTE DE DATOS), arquitectura de datos compartida (modo COLUMNA) y modo no inquilino (modo NINGUNO)
- [EasyAdmin]: un sistema de gestión de backend basado en SpringBoot2 + Sa-Token + Mybatis-Plus + Snakerflow + Layui. Es flexible y puede separar el front-end y el back-end, o puede ser una sola entidad. generador, gestión de permisos, motor de flujo de trabajo, etc.
- [sa-admin-server]: Andamiaje de desarrollo de gestión en segundo plano basado en sa-admin-ui.
Hay más casos excelentes de código abierto que no se pueden mostrar uno por uno, consulte: Awesome-Sa-Token
Enlaces amigables
- [OkHttps]: marco de comunicación http liviano, API extremadamente elegante, compatible con los protocolos WebSocket y Stomp
- [Bean Searcher]: ¡Un ORM de solo lectura que se centra en consultas avanzadas y permite la recuperación de listas complejas con una línea de código!
- [Jpom]: Software de construcción en línea, implementación automática, operación y mantenimiento diarios y monitoreo de proyectos, simple, liviano y poco intrusivo.
- [TLog]: un artefacto de seguimiento de etiquetas de registro distribuido liviano.
- [hippo4j]: Un potente marco de grupo de subprocesos dinámico con funciones de monitoreo y alarma.
- [ hertzbeat ]: un sistema de alarma y monitoreo en tiempo real de código abierto amigable y fácil de usar, que no requiere agente, un clúster de alto rendimiento y potentes capacidades de monitoreo personalizado.
- [Solon]: Un marco de desarrollo de aplicaciones más moderno: más rápido, más pequeño y más gratuito.
- [Chat2DB]: una herramienta de BI y gestión de bases de datos impulsada por IA que admite la gestión de 22 bases de datos como Mysql, pg, Oracle y Redis.
Alojamiento de código
- Casa rural: https://gitee.com/dromara/sa-token
- GitHub: https://github.com/dromara/sa-token
- Código Git: https://gitcode.com/dromara/sa-token
grupo de comunicacion
Grupo de comunicación QQ: 823181187 Haga clic para unirse
Grupo de comunicación WeChat:
(Escanee el código QR para agregar WeChat, nota: sa-token, lo invitamos a unirse al chat grupal)
Beneficios de unirse a un chat grupal:
- Reciba notificaciones de actualización del marco lo antes posible.
- Reciba notificaciones de errores del marco lo antes posible.
- Reciba notificaciones de nuevos casos de código abierto lo antes posible.
- Comunicarse (mō yú) entre sí (huá shuǐ) con muchos tipos grandes.