Sa-Token v1.39.0
Uma estrutura leve de autenticação de permissão Java que torna a autenticação simples e elegante!
Documentação on-line: https://sa-token.cc
Introdução ao Sa-Token
Sa-Token é uma estrutura leve de autenticação de permissão Java que atualmente possui cinco módulos principais: autenticação de login, autenticação de permissão, logon único, OAuth2.0 e autenticação de microsserviço.
Exibição de exemplo simples: (clique para expandir/recolher)
O Sa-Token tem como objetivo completar a parte de autenticação de permissão do sistema de forma simples e elegante. Tomando como exemplo a autenticação de login, você só precisa de:
// 会话登录,参数填登录人的账号id
StpUtil . login ( 10001 );
Não há necessidade de implementar nenhuma interface ou criar nenhum arquivo de configuração. Você só precisa chamar esse código estático para concluir a autenticação de login da sessão.
Se uma interface requer login para acesso, só precisamos chamar o seguinte código:
// 校验当前客户端是否已经登录,如果未登录则抛出 `NotLoginException` 异常
StpUtil . checkLogin ();
No Sa-Token, a maioria das funções pode ser resolvida com uma linha de código:
Expulsar pessoas off-line:
// 将账号id为 10077 的会话踢下线
StpUtil . kickout ( 10077 );
Autenticação de permissão:
// 注解鉴权:只有具备 `user:add` 权限的会话才可以进入方法
@ SaCheckPermission ( "user:add" )
public String insert ( SysUser user ) {
// ...
return "用户增加" ;
}
Autenticação de interceptação de rota:
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 ( "/**" );
Quando você estiver farto de Shiro, SpringSecurity e outras estruturas, entenderá como o design da API do Sa-Token é simples e elegante em comparação com essas estruturas antigas tradicionais!
Lista de módulos principais: (clique para expandir/recolher)
- Autenticação de login - login de extremidade única, login de várias extremidades, login mutuamente exclusivo de mesma extremidade, sem necessidade de login dentro de sete dias.
- Autenticação de permissão - autenticação de autoridade, autenticação de função, autenticação secundária de sessão.
- Expulsar pessoas off-line - Expulsar pessoas off-line com base no ID da conta e expulsá-las off-line com base no valor do token.
- Autenticação baseada em anotações – separa elegantemente a autenticação do código comercial.
- Autenticação de interceptação de rota - Com base na autenticação de interceptação de rota, o modo repousante pode ser adaptado.
- Sessão - Sessão compartilhada para todos os fins, sessão exclusiva para um extremo, sessão personalizada, acesso conveniente aos valores.
- Extensão da camada de persistência - o Redis pode ser integrado e os dados não serão perdidos após a reinicialização.
- Separação de front e backend - APPs, applets e outros terminais que não suportam cookies também podem ser facilmente autenticados.
- Personalização do estilo de token - seis estilos de token integrados, você também pode personalizar a estratégia de geração de token.
- Modo Remember Me - Adapte-se ao modo [Lembrar-me] e reinicie o navegador sem verificação.
- Autenticação de segundo nível - Autenticação novamente baseada no login para garantir a segurança.
- Simule contas de outras pessoas - Manipule quaisquer dados de status do usuário em tempo real.
- Troca temporária de identidade – Mude temporariamente a identidade da sessão para outra conta.
- Login mutuamente exclusivo no mesmo fim - como QQ, o celular e o computador estão online ao mesmo tempo, mas o login é mutuamente exclusivo nos dois celulares.
- Banimento de conta - banimento de login, banimento de classificação de negócios e banimento de escada de punição.
- Criptografia de senha – Fornece algoritmos básicos de criptografia, que podem criptografar rapidamente MD5, SHA1, SHA256 e AES.
- Consulta de sessão - Fornece uma interface de consulta de sessão conveniente e flexível.
- Autenticação Http Basic - Uma linha de código para acessar a autenticação Http Basic e Digest.
- Ouvinte global - executa algumas operações AOP durante operações importantes, como login e logout do usuário e ser expulso do modo offline.
- Filtro global - Lida convenientemente com operações de primeira classe de resposta de segurança entre domínios e definidas globalmente.
- Autenticação de sistema multicontas - autenticação separada de múltiplas contas em um sistema (como a tabela User e a tabela Admin do shopping)
- Logon único - Existem três modos de logon único integrados: mesmo domínio, domínio cruzado, mesmo Redis, Redis cruzado, separação de front-end e back-end e outras arquiteturas podem ser tratadas.
- Logout de ponto único - Inicie um logout em qualquer subsistema e todo o sistema ficará offline.
- Autenticação OAuth2.0 - Crie facilmente serviços OAuth2.0, com suporte ao modo openid.
- Sessão distribuída – Fornece uma solução de sessão distribuída em um data center compartilhado.
- Autenticação de gateway de microsserviço - adapta-se à autenticação de interceptação de rota de gateways comuns, como Gateway, ShenYu, Zuul e assim por diante.
- Autenticação de chamada RPC - autenticação de encaminhamento de gateway, autenticação de chamada RPC, para que as chamadas de serviço não sejam mais executadas nuas
- Autenticação de token temporário - resolve problemas de autorização de token de curto prazo.
- Redis independente – separa o cache de permissão e o cache de negócios.
- Autenticação de login rápida e rápida - Injete uma página de login no projeto sem código.
- Dialeto de tag - Fornece pacote de integração de dialeto de tag Thymeleaf e fornece exemplos de integração de beetl.
- integração jwt - Fornece três modos de soluções de integração jwt e recursos de parâmetros de expansão de token.
- Transferência de status de chamada RPC - Fornece pacotes de integração como dubbo e grpc, para que o status de login não seja perdido durante chamadas RPC.
- Assinatura de parâmetro - Fornece um módulo de verificação de assinatura de chamada de API entre sistemas para evitar adulteração de parâmetros e solicitação de repetição.
- Renovação automática - São fornecidas duas estratégias de expiração de token, que podem ser usadas de forma flexível e renovadas automaticamente.
- Pronto para uso imediato - Fornece pacotes de integração de estrutura comuns, como SpringMVC, WebFlux, Solon, etc., prontos para uso imediato.
- A pilha de tecnologia mais recente - adaptada à pilha de tecnologia mais recente: suporta SpringBoot 3.x, jdk 17.
Logon único SSO
Sa-Token SSO é dividido em três modos para resolver problemas de acesso SSO em diferentes arquiteturas, como mesmo domínio, domínio cruzado, Redis compartilhado, Redis cruzado, integração front-end e back-end, front-end e back-end separação...etc.:
Arquitetura do sistema | Padrão de adoção | Introdução | Link da documentação |
---|
O front-end está no mesmo domínio + o back-end está no mesmo domínio do Redis | Modo um | Sessão de sincronização de cookies compartilhada | Documentação, exemplos |
Domínios diferentes no front-end + iguais ao Redis no back-end | Modo 2 | Redirecionamento de URL propaga sessão | Documentação, exemplos |
Domínios diferentes no front-end + Redis diferentes no back-end | Modo três | Solicitação HTTP para obter sessão | Documentação, exemplos |
- Mesmo domínio front-end: significa que vários sistemas podem ser implantados sob o mesmo nome de domínio principal, como:
c1.domain.com
, c2.domain.com
, c3.domain.com
- O backend é igual ao Redis: significa que vários sistemas podem se conectar ao mesmo Redis. (Isso não exige que todos os dados do projeto sejam colocados em um Redis. Sa-Token fornece uma solução de
[权限缓存与业务缓存分离]
) - Se nem o front-end nem o back-end puderem estar no mesmo domínio do Redis, você poderá usar o modo três, ticket de verificação de solicitação HTTP para obter a sessão.
- É fornecido um exemplo do modo NoSdk e sistemas que não usam Sa-Token também podem ser conectados.
- Fornece documentação da interface sso-server e sistemas que não usam a linguagem Java também podem ser conectados.
- Fornece soluções de separação e integração de front-end e back-end: seja sso-server ou sso-client, a separação de front-end e back-end pode ser integrada.
- Fornece verificação de segurança: verificação de nome de domínio, verificação de tickets, verificação de assinatura de parâmetros, evitando efetivamente o sequestro de tickets, solicitação de repetição e outros ataques.
- Prevenção de perda de parâmetros: o autor testou várias estruturas de SSO e todos os parâmetros foram perdidos. Por exemplo, antes do login, era:
http://a.com?id=1&name=2
e, após o login bem-sucedido, tornou-se. : http://a.com?id=1
, Sa-Token-SSO possui um algoritmo especial para garantir que os parâmetros não sejam perdidos e que o caminho original seja retornado com precisão após o login bem-sucedido. - Forneça sugestões para soluções de sincronização/migração de dados do usuário: migração unificada antes do desenvolvimento, sincronização de dados em tempo real durante o tempo de execução, correspondência com base em campos associados, correspondência com base em campos center_id, etc.
- Fornece exemplos de demonstração executáveis diretamente para ajudá-lo a se familiarizar rapidamente com o processo geral de login de SSO.
Autenticação de autorização OAuth2
O módulo Sa-Token-OAuth2 é dividido em quatro modos de autorização para solucionar as necessidades de autorização em diferentes cenários.
Modo de autorização | Introdução |
---|
Código de autorização | Na etapa de autorização padrão do OAuth2.0, o servidor transfere o código para o cliente e o cliente troca o código pelo token de autorização. |
Implícito | Como opção de backup quando o modo de código de autorização não pode ser usado, o servidor usa o redirecionamento de URL para transferir diretamente o token para a página do cliente. |
Senha | O Cliente troca diretamente a conta e senha do usuário pelo token de autorização. |
Credenciais do cliente | Token do lado do servidor para nível de cliente, representando a autorização de recursos do próprio aplicativo |
Documento de referência detalhado: https://sa-token.cc/doc.html#/oauth2/readme
Caso de integração de código aberto
- [Snowy]: A primeira plataforma de desenvolvimento rápido da China que separa os segredos nacionais de antes e depois, usando Vue3 + AntDesignVue3 + Vite + SpringBoot + Mp + HuTool + SaToken.
- [RuoYi-Vue-Plus]: Reescreva todas as funções do RuoYi-Vue e integre Sa-Token+Mybatis-Plus+Jackson+Xxl-Job+knife4j+Hutool+OSS para sincronização regular
- [Smart-Admin]: SmartAdmin é a primeira plataforma de desenvolvimento rápido da China para middle e backend com "código de alta qualidade" como núcleo e "simples, eficiente e seguro";
- [Dengdeng]: Uma plataforma de desenvolvimento rápido de microsserviços de médio e back-end com foco em soluções multilocatários. O modo locatário oferece suporte a banco de dados independente (modo DATASOURCE), arquitetura de dados compartilhada (modo COLUMN) e modo não locatário (modo NONE)
- [EasyAdmin]: Um sistema de gerenciamento de back-end baseado em SpringBoot2 + Sa-Token + Mybatis-Plus + Snakerflow + Layui. É flexível e pode separar o front-end e o back-end, ou pode ser uma única entidade. gerador, gerenciamento de permissões, mecanismo de fluxo de trabalho, etc.
- [ sa-admin-server ]: Andaime de desenvolvimento de gerenciamento em segundo plano baseado em sa-admin-ui.
Existem mais casos excelentes de código aberto que não podem ser exibidos um por um, consulte: Awesome-Sa-Token
Links amigáveis
- [OkHttps]: estrutura de comunicação http leve, API extremamente elegante, suporta protocolos WebSocket e Stomp
- [Bean Searcher]: Um ORM somente leitura com foco em consultas avançadas, permitindo a recuperação de listas complexas com uma linha de código!
- [Jpom]: Construção on-line simples, leve e pouco invasiva, implantação automática, operação e manutenção diária e software de monitoramento de projeto.
- [TLog]: Um artefato leve de rastreamento de tag de log distribuído.
- [hippo4j]: Uma poderosa estrutura de pool de threads dinâmicos com funções de monitoramento e alarme.
- [ hertzbeat ]: Um sistema de monitoramento e alarme em tempo real de código aberto fácil de usar e amigável, sem necessidade de agente, cluster de alto desempenho e poderosos recursos de monitoramento personalizados.
- [Solon]: Uma estrutura de desenvolvimento de aplicativos mais moderna: mais rápida, menor e mais gratuita.
- [Chat2DB]: Uma ferramenta de BI e gerenciamento de banco de dados orientada por IA que oferece suporte ao gerenciamento de 22 bancos de dados, como Mysql, pg, Oracle e Redis.
Hospedagem de código
- Gitee: https://gitee.com/dromara/sa-token
- GitHub: https://github.com/dromara/sa-token
- GitCode: https://gitcode.com/dromara/sa-token
Grupo de comunicação
Grupo de comunicação QQ: 823181187 Clique para aderir
Grupo de comunicação WeChat:
(Escaneie o código QR para adicionar o WeChat, observe: sa-token, convide você para participar do bate-papo em grupo)
Benefícios de participar de um bate-papo em grupo:
- Receba notificações de atualização da estrutura o mais rápido possível.
- Receba notificações de bugs da estrutura o mais rápido possível.
- Receba notificações de novos casos de código aberto o mais rápido possível.
- Comuniquem-se (mō yú) entre si (huá shuǐ) com muitos caras grandes.