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
@@ -547,7 +547,7 @@ public class StpLogic {
// 4、如果代码走到此处,说明未能成功复用旧 token,需要根据算法新建 token // 4、如果代码走到此处,说明未能成功复用旧 token,需要根据算法新建 token
return SaStrategy.instance.generateUniqueToken.execute( return SaStrategy.instance.generateUniqueToken.execute(
"token", "token",
loginParameter.getMaxTryTimes(), getConfigOfMaxTryTimes(loginParameter),
() -> { () -> {
return createTokenValue(id, loginParameter.getDevice(), loginParameter.getTimeout(), loginParameter.getExtraData()); return createTokenValue(id, loginParameter.getDevice(), loginParameter.getTimeout(), loginParameter.getExtraData());
}, },
@@ -1418,7 +1418,7 @@ public class StpLogic {
// 随机创建一个 Token // 随机创建一个 Token
tokenValue = SaStrategy.instance.generateUniqueToken.execute( tokenValue = SaStrategy.instance.generateUniqueToken.execute(
"token", "token",
getConfigOfMaxTryTimes(), getConfigOfMaxTryTimes(createSaLoginParameter()),
() -> { () -> {
return createTokenValue(null, null, getConfigOrGlobal().getTimeout(), null); return createTokenValue(null, null, getConfigOrGlobal().getTimeout(), null);
}, },
@@ -2863,10 +2863,11 @@ public class StpLogic {
/** /**
* 返回全局配置的 maxTryTimes 值,在每次创建 token 时,对其唯一性测试的最高次数(-1=不测试) * 返回全局配置的 maxTryTimes 值,在每次创建 token 时,对其唯一性测试的最高次数(-1=不测试)
* *
* @param loginParameter /
* @return / * @return /
*/ */
public int getConfigOfMaxTryTimes() { public int getConfigOfMaxTryTimes(SaLoginParameter loginParameter) {
return getConfigOrGlobal().getMaxTryTimes(); return loginParameter.getMaxTryTimes();
} }
/** /**
@@ -15,9 +15,6 @@
*/ */
package cn.dev33.satoken.jwt; package cn.dev33.satoken.jwt;
import java.util.List;
import java.util.Map;
import cn.dev33.satoken.context.SaHolder; import cn.dev33.satoken.context.SaHolder;
import cn.dev33.satoken.dao.SaTokenDao; import cn.dev33.satoken.dao.SaTokenDao;
import cn.dev33.satoken.exception.ApiDisabledException; 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.error.SaJwtErrorCode;
import cn.dev33.satoken.jwt.exception.SaJwtException; import cn.dev33.satoken.jwt.exception.SaJwtException;
import cn.dev33.satoken.session.SaSession; import cn.dev33.satoken.session.SaSession;
import cn.dev33.satoken.stp.SaLoginParameter;
import cn.dev33.satoken.stp.SaTokenInfo; import cn.dev33.satoken.stp.SaTokenInfo;
import cn.dev33.satoken.stp.StpLogic; import cn.dev33.satoken.stp.StpLogic;
import cn.dev33.satoken.stp.StpUtil; import cn.dev33.satoken.stp.StpUtil;
import cn.dev33.satoken.util.SaFoxUtil; import cn.dev33.satoken.util.SaFoxUtil;
import cn.dev33.satoken.util.SaTokenConsts; import cn.dev33.satoken.util.SaTokenConsts;
import java.util.List;
import java.util.Map;
/** /**
* Sa-Token 整合 jwt -- Mixin 混入模式 * Sa-Token 整合 jwt -- Mixin 混入模式
* *
@@ -274,7 +275,7 @@ public class StpLogicJwtForMixin extends StpLogic {
* @return / * @return /
*/ */
@Override @Override
public int getConfigOfMaxTryTimes() { public int getConfigOfMaxTryTimes(SaLoginParameter loginParameter) {
return -1; return -1;
} }
@@ -15,16 +15,14 @@
*/ */
package cn.dev33.satoken.core.stp; 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.SaLoginParameter;
import cn.dev33.satoken.stp.SaTokenInfo; import cn.dev33.satoken.stp.SaTokenInfo;
import cn.dev33.satoken.util.SaTokenConsts; 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 参数扩展 * Token 参数扩展
@@ -66,15 +64,15 @@ public class TokenInfoTest {
@Test @Test
public void testLoginParameter() { public void testLoginParameter() {
Assertions.assertEquals(SaLoginConfig.setDevice("PC").getDevice(), "PC"); Assertions.assertEquals(new SaLoginParameter().setDevice("PC").getDevice(), "PC");
Assertions.assertEquals(SaLoginConfig.setIsLastingCookie(false).getIsLastingCookie(), false); Assertions.assertEquals(new SaLoginParameter().setIsLastingCookie(false).getIsLastingCookie(), false);
Assertions.assertEquals(SaLoginConfig.setTimeout(1600).getTimeout(), 1600); Assertions.assertEquals(new SaLoginParameter().setTimeout(1600).getTimeout(), 1600);
Assertions.assertEquals(SaLoginConfig.setToken("token-xxx").getToken(), "token-xxx"); Assertions.assertEquals(new SaLoginParameter().setToken("token-xxx").getToken(), "token-xxx");
Assertions.assertEquals(SaLoginConfig.setExtra("age", 18).getExtra("age"), 18); Assertions.assertEquals(new SaLoginParameter().setExtra("age", 18).getExtra("age"), 18);
Map<String, Object> extraData = new HashMap<>(); Map<String, Object> extraData = new HashMap<>();
extraData.put("age", 20); extraData.put("age", 20);
SaLoginParameter lm = SaLoginConfig.setExtraData(extraData); SaLoginParameter lm = new SaLoginParameter().setExtraData(extraData);
Assertions.assertEquals(lm.getExtraData(), extraData); Assertions.assertEquals(lm.getExtraData(), extraData);
Assertions.assertEquals(lm.getExtra("age"), 20); Assertions.assertEquals(lm.getExtra("age"), 20);
Assertions.assertTrue(lm.isSetExtraData()); Assertions.assertTrue(lm.isSetExtraData());
@@ -84,7 +82,6 @@ public class TokenInfoTest {
SaLoginParameter loginParameter = SaLoginParameter SaLoginParameter loginParameter = SaLoginParameter
.create() .create()
.setTimeout(-1); .setTimeout(-1);
loginParameter.build();
Assertions.assertEquals(loginParameter.getCookieTimeout(), Integer.MAX_VALUE); Assertions.assertEquals(loginParameter.getCookieTimeout(), Integer.MAX_VALUE);
Assertions.assertEquals(loginParameter.getDeviceOrDefault(), SaTokenConsts.DEFAULT_LOGIN_DEVICE); Assertions.assertEquals(loginParameter.getDeviceOrDefault(), SaTokenConsts.DEFAULT_LOGIN_DEVICE);
} }