Skip to content

SaToken

最后更新: 2 天前
实践版本: v2.13.4

简介

continew-starter-auth-satoken 是 ContiNew Starter 认证模块针对 SaToken 框架的扩展实现,通过简单的配置即可快速集成 SaToken 到项目中。

SaToken

Sa-Token 是一个轻量级 Java 权限认证框架,主要解决:登录认证、权限认证、单点登录、OAuth2.0、分布式Session会话、微服务网关鉴权 等一系列权限相关问题。

主要特性

  • 默认配置:SaToken 样板化配置处理,减少配置工作量
  • 灵活的持久层:提供自定义 Redisson 持久层实现,只需配置 Redis 连接信息即可使用;同时支持自定义持久层实现
  • 安全防护:内置常见路径排除机制,自动放行静态资源、接口文档等无需认证的路径
  • 扩展功能:支持与 JWT 集成,满足分布式系统认证需求

快速开始

引入依赖

pom.xml
xml
<dependency>
    <groupId>top.continew.starter</groupId>
    <artifactId>continew-starter-auth-satoken</artifactId>
</dependency>

添加配置

配置详情请查看:top.continew.starter.auth.satoken.autoconfigure.SaTokenExtensionProperties

application.yml
yaml
--- ### Sa-Token 配置
sa-token:
  # Token 名称(同时也是 cookie 名称)
  token-name: Authorization
  # Token 有效期(单位:秒,默认 30 天,-1 代表永不过期)
  timeout: 86400
  # Token 最低活跃频率(单位:秒,默认 -1,代表不限制,永不冻结。如果 token 超过此时间没有访问系统就会被冻结)
  active-timeout: 1800
  # 是否打开自动续签(如果此值为 true,框架会在每次直接或间接调用 getLoginId() 时进行一次过期检查与续签操作)
  auto-renew: true
  # 是否允许同一账号多地同时登录(为 true 时允许一起登录,为 false 时新登录挤掉旧登录)
  is-concurrent: true
  # 在多人登录同一账号时,是否共用一个 Token(为 true 时所有登录共用一个 Token,为 false 时每次登录新建一个 Token)
  is-share: false
  # 是否输出操作日志
  is-log: false
  # JWT 秘钥
  jwt-secret-key: asdasdasifhueuiwyurfewbfjsdafjk
  ## 扩展配置
  extension:
    enabled: true
    enableJwt: true
    # 持久层配置
    dao.type: REDIS
    # 安全配置:排除(放行)路径配置
    security.excludes:
      - /error
      # 静态资源
      - /*.html
      - /*/*.html
      - /*/*.css
      - /*/*.js
      - /websocket/**
      # 接口文档相关资源
      - /favicon.ico
      - /doc.html
      - /webjars/**
      - /swagger-ui/**
      - /swagger-resources/**
      - /*/api-docs/**

已提供样板化配置,如需修改,直接覆盖即可。

application.yml
yaml
sa-token:
  # token 前缀(例如填写 Bearer,实际传参 token 键: Bearer xxxx-xxxx-xxxx-xxxx)
  token-prefix: Bearer
  # 是否尝试从 请求体 里读取 Token
  is-read-body: true
  # 是否尝试从 header 里读取 Token
  is-read-header: true
  # 是否尝试从 cookie 里读取 Token(此值为 false 后,StpUtil.login(id) 登录时也不会再往前端注入 Cookie,适合前后端分离模式)
  is-read-cookie: false

自定义持久层

如果需要自定义持久层实现,请修改配置,并实现 cn.dev33.satoken.dao.SaTokenDao 接口,注入到容器中。

application.yml
yaml
--- ### Sa-Token 配置
sa-token:
  ## 扩展配置
  extension:
    enabled: true
    enableJwt: true
    # 持久层配置
    dao.type: CUSTOM

自定义拦截器

如果需要自定义拦截器,只需要参考如下配置注入你的拦截器即可,因为配置了 @ConditionalOnMissingBean 所以会自动覆盖默认的拦截器。

java
/**
 * SaToken 拦截器配置
 */
@Bean
public SaInterceptor saInterceptor() {
    return new SaInterceptor(handle -> SaRouter.match(StringConstants.PATH_PATTERN)
        .notMatch(properties.getSecurity().getExcludes())
        .check(r -> StpUtil.checkLogin()));
}

核心依赖

依赖描述
top.continew.starter:continew-starter-cache-redisson(optional)缓存模块 - Redisson
cn.dev33:sa-token-spring-boot3-starterSa-Token(轻量级 Java 权限认证框架,让鉴权变得简单、优雅)
cn.dev33:sa-token-jwtSa-Token 整合 JWT
cn.dev33:sa-token-redissonSa-Token 集成 Redisson 客户端

参考资料

  1. SaToken 官方文档:https://sa-token.cc/