Back to Sa Token

框架配置

sa-token-doc/use/config.md

1.45.032.0 KB
Original Source

框架配置

你可以零配置启动框架,但同时你也可以通过一定的参数配置,定制性使用框架,Sa-Token支持多种方式配置框架信息


1、配置方式

方式1、在 application.yml 配置
<!---------------------------- tabs:start ----------------------------> <!------------- tab:yaml 风格 ------------->
yaml
############## Sa-Token 配置 (文档: https://sa-token.cc) ##############
sa-token: 
	# token 名称(同时也是 cookie 名称)
	token-name: satoken
    # token 有效期(单位:秒) 默认30天,-1 代表永久有效
	timeout: 2592000
    # token 最低活跃频率(单位:秒),如果 token 超过此时间没有访问系统就会被冻结,默认-1 代表不限制,永不冻结
	active-timeout: -1
    # 是否允许同一账号多地同时登录 (为 true 时允许一起登录, 为 false 时新登录挤掉旧登录)
	is-concurrent: true
    # 在多人登录同一账号时,是否共用一个 token (为 true 时所有登录共用一个 token, 为 false 时每次登录新建一个 token)
	is-share: false
    # token 风格(默认可取值:uuid、simple-uuid、random-32、random-64、random-128、tik)
	token-style: uuid
    # 是否输出操作日志 
	is-log: true
<!------------- tab:properties 风格 ------------->
properties
############## Sa-Token 配置 (文档: https://sa-token.cc) ##############

# token 名称(同时也是 cookie 名称)
sa-token.token-name=satoken
# token 有效期(单位:秒) 默认30天,-1 代表永久有效
sa-token.timeout=2592000
# token 最低活跃频率(单位:秒),如果 token 超过此时间没有访问系统就会被冻结,默认-1 代表不限制,永不冻结
sa-token.active-timeout=-1
# 是否允许同一账号多地同时登录 (为 true 时允许一起登录, 为 false 时新登录挤掉旧登录)
sa-token.is-concurrent=true
# 在多人登录同一账号时,是否共用一个 token (为 true 时所有登录共用一个 token, 为 false 时每次登录新建一个 token)
sa-token.is-share=false
# token 风格(默认可取值:uuid、simple-uuid、random-32、random-64、random-128、tik)
sa-token.token-style=uuid
# 是否输出操作日志 
sa-token.is-log=true
<!---------------------------- tabs:end ---------------------------->
方式2、通过代码配置
<!------------------------------ tabs:start ------------------------------> <!------------- tab:模式 1 ------------->
java
/**
 * Sa-Token 配置类
 */
@Configuration
public class SaTokenConfigure {
	// Sa-Token 参数配置,参考文档:https://sa-token.cc
	// 此配置会覆盖 application.yml 中的配置
    @Bean
    @Primary
    public SaTokenConfig getSaTokenConfigPrimary() {
		SaTokenConfig config = new SaTokenConfig();
		config.setTokenName("satoken");             // token 名称(同时也是 cookie 名称)
		config.setTimeout(30 * 24 * 60 * 60);       // token 有效期(单位:秒),默认30天,-1代表永不过期 
		config.setActiveTimeout(-1);              // token 最低活跃频率(单位:秒),如果 token 超过此时间没有访问系统就会被冻结,默认-1 代表不限制,永不冻结
		config.setIsConcurrent(true);               // 是否允许同一账号多地同时登录(为 true 时允许一起登录,为 false 时新登录挤掉旧登录)
		config.setIsShare(false);                    // 在多人登录同一账号时,是否共用一个 token (为 true 时所有登录共用一个 token,为 false 时每次登录新建一个 token)
		config.setTokenStyle("uuid");               // token 风格
		config.setIsLog(false);                     // 是否输出操作日志 
		return config;
	}
}
<!------------- tab:模式 2 ------------->
java
/**
 * Sa-Token 配置类
 */
@Configuration
public class SaTokenConfigure {
	// Sa-Token 参数配置,参考文档:https://sa-token.cc
	// 此配置会与 application.yml 中的配置合并 (代码配置优先)
	@Autowired
	public void configSaToken(SaTokenConfig config) {
		config.setTokenName("satoken");             // token 名称(同时也是 cookie 名称)
		config.setTimeout(30 * 24 * 60 * 60);       // token 有效期(单位:秒),默认30天,-1代表永不过期 
		config.setActiveTimeout(-1);              // token 最低活跃频率(单位:秒),如果 token 超过此时间没有访问系统就会被冻结,默认-1 代表不限制,永不冻结
		config.setIsConcurrent(true);               // 是否允许同一账号多地同时登录(为 true 时允许一起登录,为 false 时新登录挤掉旧登录)
		config.setIsShare(false);                    // 在多人登录同一账号时,是否共用一个 token (为 true 时所有登录共用一个 token,为 false 时每次登录新建一个 token)
		config.setTokenStyle("uuid");               // token 风格
		config.setIsLog(false);                     // 是否输出操作日志 
	}
}
<!---------------------------- tabs:end ------------------------------>

两者的区别在于:

  • 模式 1 会覆盖 application.yml 中的配置。
  • 模式 2 会与 application.yml 中的配置合并(代码配置优先)。

2、核心包所有可配置项

2.1、核心模块配置

你不必立刻掌握整个表格,只需要在用到某个功能时再详细查阅它即可

参数名称类型默认值说明
tokenNameStringsatokenToken 名称 (同时也是 Cookie 名称、数据持久化前缀)
timeoutlong2592000Token 有效期(单位:秒),默认30天,-1代表永不过期 参考:token有效期详解
activeTimeoutlong-1Token 最低活跃频率(单位:秒),如果 token 超过此时间没有访问系统就会被冻结,默认-1 代表不限制,永不冻结(例如可以设置为1800代表30分钟内无操作就冻结) 参考:token有效期详解
dynamicActiveTimeoutBooleanfalse是否启用动态 activeTimeout 功能,如不需要请设置为 false,节省缓存请求次数
isConcurrentBooleantrue是否允许同一账号并发登录 (为 true 时允许一起登录,为 false 时新登录挤掉旧登录)
isShareBooleanfalse在多人登录同一账号时,是否共用一个 token (为 true 时所有登录共用一个 token,为 false 时每次登录新建一个 token,login 时提供了 Extra 数据后,即使配置了为 true 也不能复用旧 Token,必须创建新 Token)
replacedLoginExitModeSaReplacedLoginExitModeOLD_DEVICE在 isConcurrent=false 时,决定新旧设备谁将放弃会话 (OLD_DEVICE=旧设备下线,新设备登录成功, NEW_DEVICE=新设备登录失败,旧设备维持在线)
replacedRangeSaReplacedRangeCURR_DEVICE_TYPE在 isConcurrent=false 时,顶人下线的范围 (CURR_DEVICE_TYPE=当前指定的设备类型端, ALL_DEVICE_TYPE=所有设备类型端)
maxLoginCountint12同一账号最大登录数量,-1代表不限 (只有在 isConcurrent=trueisShare=false 时此配置才有效),详解
overflowLogoutModeSaLogoutModeLOGOUT溢出 maxLoginCount 的客户端,将以何种方式注销下线 (LOGOUT=注销下线, KICKOUT=踢人下线, REPLACED=顶人下线)
maxTryTimesint12在每次创建 Token 时的最高循环次数,用于保证 Token 唯一性(-1=不循环重试,直接使用)
isReadBodyBooleantrue是否尝试从 请求体 里读取 Token
isReadHeaderBooleantrue是否尝试从 header 里读取 Token
isReadCookieBooleantrue是否尝试从 cookie 里读取 Token,此值为 false 后,StpUtil.login(id) 登录时也不会再往前端注入Cookie
isLastingCookieBooleantrue是否为持久Cookie(临时Cookie在浏览器关闭时会自动删除,持久Cookie在重新打开后依然存在)
isWriteHeaderBooleanfalse是否在登录后将 Token 写入到响应头
logoutRangeSaLogoutRangeTOKEN注销范围 (TOKEN=只注销当前 token 的会话,ACCOUNT=注销当前 token 指向的 loginId 其所有客户端会话) (此参数只在调用 StpUtil.logout() 时有效)
isLogoutKeepFreezeOpsBooleanfalse如果 token 已被冻结,是否保留其操作权 (是否允许此 token 调用注销API) (此参数只在调用 StpUtil.[logout/kickout/replaced]ByTokenValue("token") 时有效)
isLogoutKeepTokenSessionBooleanfalse在注销 token 后,是否保留其对应的 Token-Session
rightNowCreateTokenSessionBooleanfalse在登录时,是否立即创建对应的 Token-Session (true=在登录时立即创建,false=在第一次调用 getTokenSession() 时创建)
tokenStyleStringuuidtoken风格, 参考:自定义Token风格
dataRefreshPeriodint30默认数据持久组件实现类中,每次清理过期数据间隔的时间 (单位: 秒) ,默认值30秒,设置为-1代表不启动定时清理
tokenSessionCheckLoginBooleantrue获取 Token-Session 时是否必须登录 (如果配置为true,会在每次获取 Token-Session 时校验是否登录),详解
autoRenewBooleantrue是否打开自动续签 (如果此值为true,框架会在每次直接或间接调用 getLoginId() 时进行一次过期检查与续签操作),参考:token有效期详解
tokenPrefixStringnulltoken前缀,例如填写 Bearer 实际传参 satoken: Bearer xxxx-xxxx-xxxx-xxxx 参考:自定义Token前缀
cookieAutoFillPrefixBooleanfalsecookie 模式是否自动填充 token 提交前缀
isPrintBooleantrue是否在初始化配置时打印版本字符画
isLogBooleanfalse是否打印操作日志
logLevelStringtrace日志等级(trace、debug、info、warn、error、fatal),此值与 logLevelInt 联动
logLevelIntint1日志等级 int 值(1=trace、2=debug、3=info、4=warn、5=error、6=fatal),此值与 logLevel 联动
isColorLogBooleannull是否打印彩色日志,true=打印彩色日志,false=打印黑白日志,null=框架根据运行终端自行判断是否打印彩色日志
jwtSecretKeyStringnulljwt秘钥 (只有集成 sa-token-temp-jwt 模块时此参数才会生效),参考:和 jwt 集成
sameTokenTimeoutlong86400Same-Token的有效期 (单位: 秒),参考:内部服务外网隔离
basicString""Http Basic 认证的账号和密码 参考:Http Basic 认证
currDomainStringnull配置当前项目的网络访问地址
checkSameTokenBooleanfalse是否校验Same-Token(部分rpc插件有效)
cookieObjectnew SaCookieConfig()Cookie 配置对象
signObjectnew SaSignConfig()API 签名配置对象

2.2、Cookie相关配置:

参数名称类型默认值说明
domainStringnull作用域(写入Cookie时显式指定的作用域, 常用于单点登录二级域名共享Cookie的场景)
pathString/路径,默认写在域名根路径下
secureBooleanfalse是否只在 https 协议下有效
httpOnlyBooleanfalse是否禁止 js 操作 Cookie
sameSiteStringLax第三方限制级别(Strict=完全禁止,Lax=部分允许,None=不限制)
extraAttrsStringnew LinkedHashMap()额外扩展属性

Cookie 配置示例:

<!---------------------------- tabs:start ----------------------------> <!------------- tab:yaml 风格 ------------->
yaml
# Sa-Token 配置
sa-token: 
    # Cookie 相关配置 
    cookie: 
		# 基础属性 
        domain: stp.com
        path: /
        secure: false
		httpOnly: true
		sameSite: Lax
        # 额外扩展属性
        extraAttrs:
            # Cookie 优先级
            Priority: Medium
            # Cookie 独立分区
            Partitioned: ""
            # 可以是任意键值对
            # abc: def
<!------------- tab:properties 风格 ------------->
properties
# Cookie 相关配置 
# ---- 基础属性
sa-token.cookie.domain=stp.com
sa-token.cookie.path=/
sa-token.cookie.secure=false
sa-token.cookie.httpOnly=true
sa-token.cookie.sameSite=Lax
# ---- 额外扩展属性
# Cookie 优先级
sa-token.cookie.extraAttrs.Priority=Medium
# Cookie 独立分区
sa-token.cookie.extraAttrs.Partitioned=""
# 可以是任意键值对
# sa-token.cookie.extraAttrs.abc=def
<!---------------------------- tabs:end ---------------------------->

2.3、Sign 参数签名相关配置

参数名称类型默认值说明
secretKeyStringnullAPI 调用签名秘钥
timestampDisparitylong900000接口调用时的时间戳允许的差距(单位:ms),-1 代表不校验差距,默认15分钟
digestAlgoStringmd5对 fullStr 的摘要算法

示例:

<!---------------------------- tabs:start ----------------------------> <!------------- tab:yaml 风格 ------------->
yaml
# Sa-Token 配置
sa-token: 
    # 参数签名配置 
    sign: 
		# API 接口调用签名秘钥
        secret-key: kQwIOrYvnXmSDkwEiFngrKidMcdrgKor
<!------------- tab:properties 风格 ------------->
properties
# API 接口调用签名秘钥
sa-token.sign.secret-key=kQwIOrYvnXmSDkwEiFngrKidMcdrgKor
<!---------------------------- tabs:end ---------------------------->

2.4、API Key 相关配置

参数名称类型默认值说明
prefixStringAK-API Key 前缀
timeoutlong2592000API Key 有效期,-1=永久有效,默认30天 (修改此配置项不会影响到已创建的 API Key)
isRecordIndexStringtrue框架是否记录索引信息

示例:

<!---------------------------- tabs:start ----------------------------> <!------------- tab:yaml 风格 ------------->
yaml
# Sa-Token 配置
sa-token:
    # API Key 相关配置
    api-key:
        # API Key 前缀
        prefix: AK-
        # API Key 有效期,-1=永久有效,默认30天 (修改此配置项不会影响到已创建的 API Key)
        timeout: 2592000
        # 框架是否记录索引信息
        is-record-index: true
<!------------- tab:properties 风格 ------------->
properties
# API Key 前缀
sa-token.pi-key.prefix=AK-
# API Key 有效期,-1=永久有效,默认30天 (修改此配置项不会影响到已创建的 API Key)
sa-token.pi-key.timeout=2592000
# 框架是否记录索引信息
sa-token.pi-key.is-record-index=true
<!---------------------------- tabs:end ---------------------------->

3、单点登录相关配置

3.1、SSO-Server 端配置

参数名称类型默认值说明
modeString指定当前系统集成 SSO 时使用的模式(约定型配置项,不对代码逻辑产生任何影响)
ticketTimeoutlong300ticket 有效期 (单位: 秒)
homeRouteString主页路由:在 /sso/auth 登录页不指定 redirect 参数时,默认跳转的地址
isSloBooleantrue是否打开单点注销功能
autoRenewTimeoutBoleanfalse是否在每次下发 ticket 时,自动续期 token 的有效期(根据全局 timeout 值)
maxRegClientint32在 Access-Session 上记录 Client 信息的最高数量(-1=无限),超过此值将进行自动清退处理,先进先出
isCheckSignBooleantrue是否校验参数签名(方便本地调试用的一个配置项,生产环境请务必为true)
clientsMapnew LinkedHashMap<>();以 Map<String, SaSsoClientModel> 格式配置 Client 列表
allowAnonClientBooleanfalse是否允许匿名 Client 接入。参考: 匿名 client 接入
allowUrlString所有允许的授权回调地址,多个用逗号隔开 (不在此列表中的URL将禁止下放ticket) (匿名 client 使用),参考:SSO整合:配置域名校验
secretKeyStringAPI 调用签名秘钥 (全局默认 + 匿名 client 使用)

配置示例:

<!---------------------------- tabs:start ----------------------------> <!------------- tab:yaml 风格 ------------->
yml
# Sa-Token 配置
sa-token: 
    # SSO-Server 配置
    sso-server:
        # Ticket有效期 (单位: 秒),默认五分钟 
        ticket-timeout: 300
        # 主页路由:在 /sso/auth 登录页不指定 redirect 参数时,默认跳转的地址
        home-route: /home
<!------------- tab:properties 风格 ------------->
properties
# SSO-Server 配置
# Ticket有效期 (单位: 秒),默认五分钟 
sa-token.sso-server.ticket-timeout=300
# 主页路由:在 /sso/auth 登录页不指定 redirect 参数时,默认跳转的地址
sa-token.sso-server.home-route=/home
<!---------------------------- tabs:end ---------------------------->

3.2、SSO-Client 端配置

参数名称类型默认值说明
modeString指定当前系统集成 SSO 时使用的模式(约定型配置项,不对代码逻辑产生任何影响)
clientString""当前 Client 名称标识,用于和 ticket 码的互相锁定
serverUrlStringnull配置 Server 端主机总地址,拼接在 authUrlcheckTicketUrluserinfoUrlsloUrl 属性前面,用以简化各种 url 配置,参考:详解
authUrlString/sso/auth配置 Server 端单点登录授权地址
signoutUrlString/sso/signout配置 Server 端单点注销地址
pushUrlString/sso/pushS配置 Server 端的推送消息地址
getDataUrlString/sso/getData配置 Server 端的 拉取数据 地址
currSsoLoginStringnull配置当前 Client 端的登录地址(为空时自动获取)
currSsoLogoutCallStringnull配置当前 Client 端的单点注销回调URL (为空时自动获取)
isHttpBooleanfalse是否打开模式三(此值为 true 时将使用 http 请求:校验 ticket 值、单点注销、拉取数据getData),参考:详解
isSloBooleantrue是否打开单点注销功能
regLogoutCallBooleanfalse是否注册单点登录注销回调 (为 true 时,登录时附带单点登录回调地址,并且开放 /sso/logoutCall 地址)
secretKeyString""API 调用签名秘钥
isCheckSignBooleantrue是否校验参数签名(方便本地调试用的一个配置项,生产环境请务必为true)

配置示例:

<!---------------------------- tabs:start ----------------------------> <!------------- tab:yaml 风格 ------------->
yaml
# Sa-Token 配置
sa-token: 
    # SSO-相关配置
    sso-client: 
        # sso-server 端主机地址
        server-url: http://sa-sso-server.com:9000
        # 是否打开单点注销功能 
        is-slo: true
<!------------- tab:properties 风格 ------------->
properties
# sso-server 端主机地址
sa-token.sso-client.server-url=http://sa-sso-server.com:9000
# 是否打开单点注销功能 
sa-token.sso-client.is-slo=true
<!---------------------------- tabs:end ---------------------------->

3.3、SaSsoClientModel 配置

参数名称类型默认值说明
clientString""当前 Client 名称标识,用于和 ticket 码的互相锁定
allowUrlString所有允许的授权回调地址,多个用逗号隔开 (不在此列表中的URL将禁止下放ticket) (匿名 client 使用),参考:SSO整合:配置域名校验
isPushBooleanfalse是否接收推送消息
isSloBooleantrue是否打开单点注销功能
secretKeyString""API 调用签名秘钥
serverUrlStringnull配置 Server 端主机总地址,拼接在 authUrlcheckTicketUrluserinfoUrlsloUrl 属性前面,用以简化各种 url 配置,参考:详解
pushUrlString/sso/pushC配置此 Client 端的推送消息地址

配置示例:

<!---------------------------- tabs:start ----------------------------> <!------------- tab:yaml 风格 ------------->
yml
# Sa-Token 配置
sa-token: 
    # SSO-Server 配置
    sso-server:
        # 应用列表:配置接入的应用信息
        clients:
            # 应用 sso-client1 
            sso-client1:
                client: sso-client1
                allow-url: "*"
                secret-key: SSO-C1-kQwIOrYvnXmSDkwEiFngrKidMcdrgKor
            # 应用 sso-client2 
            sso-client2:
                client: sso-client2
                allow-url: "*"
                secret-key: SSO-C2-kQwIOrYvnXmSDkwEiFngrKidMcdrgKor
<!------------- tab:properties 风格 ------------->
properties
# 应用列表:配置接入的应用信息
# 应用 sso-client1 
sa-token.sso-server.clients.sso-client1.client=sso-client1
sa-token.sso-server.clients.sso-client1.allow-url=*
sa-token.sso-server.clients.sso-client1.secret-key=SSO-C1-kQwIOrYvnXmSDkwEiFngrKidMcdrgKor

# 应用 sso-client2 
sa-token.sso-server.clients.sso-client2.client=sso-client2
sa-token.sso-server.clients.sso-client2.allow-url=*
sa-token.sso-server.clients.sso-client2.secret-key=SSO-C2-kQwIOrYvnXmSDkwEiFngrKidMcdrgKor
<!---------------------------- tabs:end ---------------------------->

4、OAuth2.0相关配置

4.1、OAuth2-Server 相关配置

参数名称类型默认值说明
enableAuthorizationCodeBooleantrue是否打开模式:授权码(Authorization Code
enableImplicitBooleantrue是否打开模式:隐藏式(Implicit
enablePasswordBooleantrue是否打开模式:密码式(Password
enableClientCredentialsBooleantrue是否打开模式:凭证式(Client Credentials
codeTimeoutlong300Code授权码 保存的时间(单位:秒) 默认五分钟
accessTokenTimeoutlong7200全局默认配置所有应用:Access-Token 保存的时间(单位:秒)默认两个小时
refreshTokenTimeoutlong2592000全局默认配置所有应用:Refresh-Token 保存的时间(单位:秒) 默认30 天
clientTokenTimeoutlong7200全局默认配置所有应用:Client-Token 保存的时间(单位:秒) 默认两个小时
maxAccessTokenCountint12全局默认配置所有应用:单个应用单个用户最多同时存在的 Access-Token 数量
maxRefreshTokenCountint12全局默认配置所有应用:单个应用单个用户最多同时存在的 Refresh-Token 数量
maxClientTokenCountint12全局默认配置所有应用:单个应用最多同时存在的 Client-Token 数量
isNewRefreshBooleanfalse全局默认配置所有应用:是否在每次 Refresh-Token 刷新 Access-Token 时,产生一个新的 Refresh-Token
openidDigestPrefixStringopenid_default_digest_prefix默认 openid 生成算法中使用的摘要前缀
unionidDigestPrefixStringunionid_default_digest_prefix默认 unionid 生成算法中使用的摘要前缀
higherScopeString指定高级权限,多个用逗号隔开
lowerScopeString指定低级权限,多个用逗号隔开
mode4ReturnAccessTokenBooleanfalse模式4是否返回 AccessToken 字段,用于兼容OAuth2标准协议
hideStatusFieldBooleanfalse是否在返回值中隐藏默认的状态字段 (code、msg、data)
oidcSaOAuth2OidcConfignew SaOAuth2OidcConfig()OIDC 相关配置
clientsMap<String, SaClientModel>配置 SaClientModel 列表信息

配置示例:

<!---------------------------- tabs:start ----------------------------> <!------------- tab:yaml 风格 ------------->
yaml
# Sa-Token 配置
sa-token: 
    token-name: sa-token-oauth2-server
    # OAuth2.0 配置 
    oauth2-server: 
        enable-authorization-code: true
        enable-implicit: true
        enable-password: true
        enable-client-credentials: true
<!------------- tab:properties 风格 ------------->
properties
# Sa-Token 配置 
sa-token.token-name=sa-token-oauth2-server
# OAuth2.0 配置 
sa-token.oauth2-server.enable-authorization-code=true
sa-token.oauth2-server.enable-implicit=true
sa-token.oauth2-server.enable-password=true
sa-token.oauth2-server.enable-client-credentials=true
<!---------------------------- tabs:end ---------------------------->

4.2、OIDC 相关配置

参数名称类型默认值说明
issStringiss 值,如不配置则自动计算
idTokenTimeoutlong600idToken 有效期(单位秒) 默认十分钟
<!---------------------------- tabs:start ----------------------------> <!------------- tab:yaml 风格 ------------->
yaml
# Sa-Token 配置
sa-token: 
    oauth2-server: 
		oidc: 
			iss: xxx
			idTokenTimeout: 600
<!------------- tab:properties 风格 ------------->
properties
sa-token.oauth2-server.oidc.iss=xxx
sa-token.oauth2-server.oidc.idTokenTimeout=600
<!---------------------------- tabs:end ---------------------------->

4.3、SaClientModel属性定义

参数名称类型默认值说明
clientIdStringnull应用id,应该全局唯一
clientSecretStringnull应用秘钥
contractScopesList<String>[]应用签约的所有权限
allowRedirectUrisList<String>[]应用允许授权的所有URL(可以使用 * 号通配符)
allowGrantTypesList<String>[]应用允许的所有 grant_type
subjectIdStringnull应用主体id
accessTokenTimeoutlong取全局配置 (7200)此应用Access-Token 保存的时间(单位:秒) [默认取全局配置]
refreshTokenTimeoutlong取全局配置 (2592000)此应用Refresh-Token 保存的时间(单位:秒) [默认取全局配置]
clientTokenTimeoutBoolean取全局配置 (7200)此应用Client-Token 保存的时间(单位:秒) [默认取全局配置]
maxAccessTokenCountlong取全局配置 (12)此应用单个用户最多同时存在的 Access-Token 数量
maxRefreshTokenCountlong取全局配置 (12)此应用单个用户最多同时存在的 Refresh-Token 数量
maxClientTokenCountlong取全局配置 (12)此应用最多同时存在的 Client-Token 数量
isNewRefreshBoolean取全局配置单独配置此 Client:是否在每次 Refresh-Token 刷新 Access-Token 时,产生一个新的 Refresh-Token [ 默认取全局配置 ]
isAutoConfirmBooleanfalse是否允许此应用自动确认授权 <span style="color: red;">(高危配置,禁止向不被信任的第三方开启此选项)</span>

5、部分配置项详解

对部分配置项做一下详解

配置项详解:maxLoginCount

配置含义:同一账号最大登录数量。

在配置 isConcurrent=true, isShare=false 时,Sa-Token 将允许同一账号并发登录,且每次登录都会产生一个新Token, 这些 Token 都会以 SaTerminalInfo 的形式记录在其 Account-Session 之上,这就造成一个问题:

随着同一账号登录的次数越来越多,SaTerminalInfo 的列表也会越来越大,极端情况下,列表长度可能达到成百上千以上,严重拖慢数据处理速度, 为此 Sa-Token 对这个 SaTerminalInfo 列表的大小设定一个上限值,也就是 maxLoginCount,默认值=12。

假设一个账号的登录数量超过 maxLoginCount 后,将会主动注销第一个登录的会话(先进先出),以此保证队列中的有效会话数量始终 <= maxLoginCount 值。

配置项详解:tokenSessionCheckLogin

配置含义:获取 Token-Session 时是否必须登录 (如果配置为true,会在每次获取 Token-Session 时校验是否登录)。

在调用 StpUtil.login(id) 登录后,

  • 调用 StpUtil.getSession() 可以获取这个会话的 Account-Session 对象。
  • 调用 StpUtil.getTokenSession() 可以获取这个会话 Token-Session 对象。

关于两种 Session 有何区别,可以参考这篇:Session模型详解,此处暂不赘述。

从设计上讲,无论会话是否已经登录,只要前端提供了Token,我们就可以找到这个 Token 的专属 Token-Session 对象,这非常灵活但不安全, 因为前端提交的 Token 可能是任意伪造的。

为了解决这个问题,StpUtil.getTokenSession() 方法在获取 Token-Session 时,会率先检测一下这个 Token 是否是一个有效Token:

  • 如果是有效Token,正常返回 Token-Session 对象
  • 如果是无效Token,则抛出异常。

这样就保证了伪造的 Token 是无法获取 Token-Session 对象的。

但是 —— 有的场景下我们又确实需要在登录之前就使用 Token-Session 对象,这时候就把配置项 tokenSessionCheckLogin 值改为 false 即可。

<!-- #### 配置项详解:isAutoMode 配置含义:是否自动判断此 Client 开放的授权模式。 - 此值为 true 时:四种模式(`isCode、isImplicit、isPassword、isClient`)是否生效,依靠全局设置; - 此值为 false 时:四种模式(`isCode、isImplicit、isPassword、isClient`)是否生效,依靠局部配置+全局配置(两个都为 true 时才打开) -->

配置项详解:isHttp

配置含义:是否打开单点登录模式三。

  • 此配置项为 false 时,代表使用SSO模式二:使用 Redis 校验 ticket 值、删除 Redis 数据做到单点注销、使用 Redis 同步 Userinfo 数据。
  • 此配置项为 true 时,代表使用SSO模式三:使用 Http 请求校验 ticket 值、使用 Http 请求做到单点注销、使用 Http 请求同步 Userinfo 数据。

<a class="case-btn" href="https://gitee.com/dromara/sa-token/blob/master/sa-token-demo/sa-token-demo-case/src/main/resources/application.yml" target="_blank"> 本章代码示例:Sa-Token 框架配置 —— [ application.yml ] </a> <a class="dt-btn" href="https://www.wenjuan.ltd/s/nUfe2iU/" target="_blank">本章小练习:Sa-Token 基础 - 框架配置,章节测试</a>