当前位置:   article > 正文

【Sa-Token|0】Sa-Token基础介绍

sa-token

Sa-Token 是一个轻量级的 Java 权限认证框架,常用于实现登录认证、权限验证、Session
会话管理、单点登录(SSO)、OAuth2 等功能。在微服务架构中,Sa-Token 可以有效地管理各个服务之间的认证和授权。以下是 Sa-Token 应用详细介绍:

在这里插入图片描述

1. 认证与授权

在微服务架构中,每个服务可能都需要独立的认证与授权机制。Sa-Token 提供了简单易用的 API 来实现这些功能。

1.1 登录认证

用户登录后,Sa-Token 会生成一个 Token 并返回给客户端。客户端在后续请求中需要携带这个 Token 进行身份验证。

示例代码:

// 登录时生成 Token
StpUtil.login(userId);

// 获取当前登录用户的 Token
String token = StpUtil.getTokenValue();
  • 1
  • 2
  • 3
  • 4
  • 5
1.2 权限验证

在微服务中,不同的服务或接口可能需要不同的权限,Sa-Token 提供了简洁的权限验证方法。

示例代码:

// 检查当前用户是否具有某权限
StpUtil.checkPermission("user-add");

// 检查当前用户是否具有多个权限中的一个
StpUtil.checkPermissionOr("user-add", "user-update");
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述

2. Session 会话管理

Sa-Token 提供了强大的 Session 管理功能,可以跨服务共享用户的会话状态。

2.1 设置 Session 属性

可以在 Session 中存储用户的各种信息,比如购物车数据、用户偏好等。

示例代码:

// 设置 Session 属性
StpUtil.getSession().setAttribute("key", "value");

// 获取 Session 属性
Object value = StpUtil.getSession().getAttribute("key");
  • 1
  • 2
  • 3
  • 4
  • 5

3. 单点登录(SSO)

在微服务架构中,用户往往需要在多个系统之间无缝切换。Sa-Token 支持多种 SSO 方案,简化了单点登录的实现。

3.1 SSO 配置

Sa-Token 支持使用 JWT 实现单点登录,这种方式可以在各个服务之间共享用户身份。

示例代码:

// 配置 Sa-Token 的 SSO 模式
SaSsoConfig ssoConfig = new SaSsoConfig();
ssoConfig.setSsoMode(SaSsoConfig.SSO_MODE_JWT);
SaManager.setConfig(ssoConfig);
  • 1
  • 2
  • 3
  • 4

4. OAuth2

Sa-Token 提供了对 OAuth2 的支持,便于与第三方系统集成,进行身份认证和授权。

4.1 OAuth2 配置

通过简单的配置,可以让 Sa-Token 支持 OAuth2 协议。

示例代码:

// 配置 Sa-Token 支持 OAuth2
SaOAuth2Config oauth2Config = new SaOAuth2Config();
oauth2Config.setClientId("client_id");
oauth2Config.setClientSecret("client_secret");
SaManager.setConfig(oauth2Config);
  • 1
  • 2
  • 3
  • 4
  • 5

5. 集成与扩展

Sa-Token 提供了丰富的扩展接口,可以与各种微服务框架和技术栈集成,比如 Spring Cloud、Dubbo 等。

5.1 集成 Spring Cloud

在 Spring Cloud 项目中,Sa-Token 可以与 Gateway、Feign 等组件配合使用,实现统一认证和权限控制。

示例代码:

// 在 Gateway 过滤器中进行 Token 验证
@Component
public class TokenFilter implements GlobalFilter, Ordered {
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        String token = exchange.getRequest().getHeaders().getFirst("Authorization");
        if (token != null && StpUtil.checkToken(token)) {
            return chain.filter(exchange);
        }
        return Mono.error(new RuntimeException("Token 验证失败"));
    }

    @Override
    public int getOrder() {
        return -100;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
5.2 集成 Dubbo

在 Dubbo 项目中,可以通过拦截器的方式集成 Sa-Token,实现分布式环境下的统一认证。

示例代码:

// 定义 Dubbo 拦截器
@Activate(group = {CommonConstants.CONSUMER, CommonConstants.PROVIDER})
public class SaTokenInterceptor implements Filter {
    @Override
    public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
        // 验证 Token
        StpUtil.checkToken(StpUtil.getTokenValue());
        return invoker.invoke(invocation);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

总结

Sa-Token 在微服务中的应用可以有效地简化认证和授权的实现,提高系统的安全性和可维护性。通过灵活的配置和丰富的功能,Sa-Token 可以满足不同场景下的需求,帮助开发者快速构建安全可靠的微服务系统。

参考资料

官网:官网
文档资料:文档

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/寸_铁/article/detail/933743
推荐阅读
相关标签
  

闽ICP备14008679号