fix: 修复 jwt mixin 模式不能正确创建 token 的问题

This commit is contained in:
click33 2025-03-02 05:10:52 +08:00
parent 0e4d812b8b
commit 42fbb0dde8
3 changed files with 21 additions and 22 deletions

View File

@ -547,7 +547,7 @@ public class StpLogic {
// 4如果代码走到此处说明未能成功复用旧 token需要根据算法新建 token
return SaStrategy.instance.generateUniqueToken.execute(
"token",
loginParameter.getMaxTryTimes(),
getConfigOfMaxTryTimes(loginParameter),
() -> {
return createTokenValue(id, loginParameter.getDevice(), loginParameter.getTimeout(), loginParameter.getExtraData());
},
@ -1418,7 +1418,7 @@ public class StpLogic {
// 随机创建一个 Token
tokenValue = SaStrategy.instance.generateUniqueToken.execute(
"token",
getConfigOfMaxTryTimes(),
getConfigOfMaxTryTimes(createSaLoginParameter()),
() -> {
return createTokenValue(null, null, getConfigOrGlobal().getTimeout(), null);
},
@ -2863,10 +2863,11 @@ public class StpLogic {
/**
* 返回全局配置的 maxTryTimes 在每次创建 token 对其唯一性测试的最高次数-1=不测试
*
* @param loginParameter /
* @return /
*/
public int getConfigOfMaxTryTimes() {
return getConfigOrGlobal().getMaxTryTimes();
public int getConfigOfMaxTryTimes(SaLoginParameter loginParameter) {
return loginParameter.getMaxTryTimes();
}
/**

View File

@ -15,9 +15,6 @@
*/
package cn.dev33.satoken.jwt;
import java.util.List;
import java.util.Map;
import cn.dev33.satoken.context.SaHolder;
import cn.dev33.satoken.dao.SaTokenDao;
import cn.dev33.satoken.exception.ApiDisabledException;
@ -26,12 +23,16 @@ import cn.dev33.satoken.exception.SaTokenException;
import cn.dev33.satoken.jwt.error.SaJwtErrorCode;
import cn.dev33.satoken.jwt.exception.SaJwtException;
import cn.dev33.satoken.session.SaSession;
import cn.dev33.satoken.stp.SaLoginParameter;
import cn.dev33.satoken.stp.SaTokenInfo;
import cn.dev33.satoken.stp.StpLogic;
import cn.dev33.satoken.stp.StpUtil;
import cn.dev33.satoken.util.SaFoxUtil;
import cn.dev33.satoken.util.SaTokenConsts;
import java.util.List;
import java.util.Map;
/**
* Sa-Token 整合 jwt -- Mixin 混入模式
*
@ -274,7 +275,7 @@ public class StpLogicJwtForMixin extends StpLogic {
* @return /
*/
@Override
public int getConfigOfMaxTryTimes() {
public int getConfigOfMaxTryTimes(SaLoginParameter loginParameter) {
return -1;
}

View File

@ -15,16 +15,14 @@
*/
package cn.dev33.satoken.core.stp;
import java.util.HashMap;
import java.util.Map;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import cn.dev33.satoken.stp.SaLoginConfig;
import cn.dev33.satoken.stp.SaLoginParameter;
import cn.dev33.satoken.stp.SaTokenInfo;
import cn.dev33.satoken.util.SaTokenConsts;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import java.util.HashMap;
import java.util.Map;
/**
* Token 参数扩展
@ -66,15 +64,15 @@ public class TokenInfoTest {
@Test
public void testLoginParameter() {
Assertions.assertEquals(SaLoginConfig.setDevice("PC").getDevice(), "PC");
Assertions.assertEquals(SaLoginConfig.setIsLastingCookie(false).getIsLastingCookie(), false);
Assertions.assertEquals(SaLoginConfig.setTimeout(1600).getTimeout(), 1600);
Assertions.assertEquals(SaLoginConfig.setToken("token-xxx").getToken(), "token-xxx");
Assertions.assertEquals(SaLoginConfig.setExtra("age", 18).getExtra("age"), 18);
Assertions.assertEquals(new SaLoginParameter().setDevice("PC").getDevice(), "PC");
Assertions.assertEquals(new SaLoginParameter().setIsLastingCookie(false).getIsLastingCookie(), false);
Assertions.assertEquals(new SaLoginParameter().setTimeout(1600).getTimeout(), 1600);
Assertions.assertEquals(new SaLoginParameter().setToken("token-xxx").getToken(), "token-xxx");
Assertions.assertEquals(new SaLoginParameter().setExtra("age", 18).getExtra("age"), 18);
Map<String, Object> extraData = new HashMap<>();
extraData.put("age", 20);
SaLoginParameter lm = SaLoginConfig.setExtraData(extraData);
SaLoginParameter lm = new SaLoginParameter().setExtraData(extraData);
Assertions.assertEquals(lm.getExtraData(), extraData);
Assertions.assertEquals(lm.getExtra("age"), 20);
Assertions.assertTrue(lm.isSetExtraData());
@ -84,7 +82,6 @@ public class TokenInfoTest {
SaLoginParameter loginParameter = SaLoginParameter
.create()
.setTimeout(-1);
loginParameter.build();
Assertions.assertEquals(loginParameter.getCookieTimeout(), Integer.MAX_VALUE);
Assertions.assertEquals(loginParameter.getDeviceOrDefault(), SaTokenConsts.DEFAULT_LOGIN_DEVICE);
}