1
0
mirror of https://gitee.com/dromara/sa-token.git synced 2025-04-05 17:37:53 +08:00

feat: SaLoginParameter 支持配置 SaCookieConfig 参数

This commit is contained in:
click33 2025-04-02 07:55:15 +08:00
parent bb5ceb1dc0
commit c289ec572d
3 changed files with 75 additions and 9 deletions
sa-token-core/src/main/java/cn/dev33/satoken/stp
sa-token-doc/up

View File

@ -174,7 +174,7 @@ public class StpLogic {
* @param tokenValue token
*/
public void setTokenValue(String tokenValue){
setTokenValue(tokenValue, createSaLoginParameter().setTimeout(getConfigOrGlobal().getTimeout()));
setTokenValue(tokenValue, createSaLoginParameter());
}
/**
@ -205,7 +205,7 @@ public class StpLogic {
// 2. token 写入到当前会话的 Cookie
if (getConfigOrGlobal().getIsReadCookie()) {
setTokenValueToCookie(tokenValue, loginParameter.getCookieTimeout());
setTokenValueToCookie(tokenValue, loginParameter.getCookie(), loginParameter.getCookieTimeout());
}
// 3. token 写入到当前请求的响应头中
@ -244,17 +244,30 @@ public class StpLogic {
* @param cookieTimeout Cookie存活时间单位-1代表为内存Cookie浏览器关闭后消失
*/
public void setTokenValueToCookie(String tokenValue, int cookieTimeout){
SaCookieConfig cfg = getConfigOrGlobal().getCookie();
setTokenValueToCookie(tokenValue, null, cookieTimeout);
}
/**
* token 写入到当前会话的 Cookie
*
* @param tokenValue token
* @param cookieConfig Cookie 配置项
* @param cookieTimeout Cookie存活时间单位-1代表为内存Cookie浏览器关闭后消失
*/
public void setTokenValueToCookie(String tokenValue, SaCookieConfig cookieConfig, int cookieTimeout){
if(cookieConfig == null) {
cookieConfig = getConfigOrGlobal().getCookie();
}
SaCookie cookie = new SaCookie()
.setName(getTokenName())
.setValue(tokenValue)
.setMaxAge(cookieTimeout)
.setDomain(cfg.getDomain())
.setPath(cfg.getPath())
.setSecure(cfg.getSecure())
.setHttpOnly(cfg.getHttpOnly())
.setSameSite(cfg.getSameSite())
.setExtraAttrs(cfg.getExtraAttrs())
.setDomain(cookieConfig.getDomain())
.setPath(cookieConfig.getPath())
.setSecure(cookieConfig.getSecure())
.setHttpOnly(cookieConfig.getHttpOnly())
.setSameSite(cookieConfig.getSameSite())
.setExtraAttrs(cookieConfig.getExtraAttrs())
;
SaHolder.getResponse().addCookie(cookie);
}

View File

@ -16,8 +16,10 @@
package cn.dev33.satoken.stp.parameter;
import cn.dev33.satoken.SaManager;
import cn.dev33.satoken.config.SaCookieConfig;
import cn.dev33.satoken.config.SaTokenConfig;
import cn.dev33.satoken.dao.SaTokenDao;
import cn.dev33.satoken.fun.SaParamFunction;
import cn.dev33.satoken.stp.parameter.enums.SaLogoutMode;
import cn.dev33.satoken.stp.parameter.enums.SaReplacedRange;
import cn.dev33.satoken.util.SaTokenConsts;
@ -123,6 +125,11 @@ public class SaLoginParameter {
*/
private Boolean rightNowCreateTokenSession;
/**
* Cookie 配置对象
*/
public SaCookieConfig cookie = new SaCookieConfig();
// ------ 附加方法
@ -151,6 +158,17 @@ public class SaLoginParameter {
this.replacedRange = config.getReplacedRange();
this.overflowLogoutMode = config.getOverflowLogoutMode();
this.rightNowCreateTokenSession = config.getRightNowCreateTokenSession();
this.setupCookieConfig(cookie -> {
SaCookieConfig gCookie = config.getCookie();
cookie.setDomain(gCookie.getDomain());
cookie.setPath(gCookie.getPath());
cookie.setSecure(gCookie.getSecure());
cookie.setHttpOnly(gCookie.getHttpOnly());
cookie.setSameSite(gCookie.getSameSite());
cookie.setExtraAttrs(new LinkedHashMap<>(gCookie.getExtraAttrs()));
});
return this;
}
@ -245,6 +263,16 @@ public class SaLoginParameter {
return new SaLoginParameter(SaManager.getConfig());
}
/**
* 设置 Cookie 配置项
* @param fun /
* @return 对象自身
*/
public SaLoginParameter setupCookieConfig(SaParamFunction<SaCookieConfig> fun) {
fun.run(this.cookie);
return this;
}
// ---------------- get set
@ -524,6 +552,22 @@ public class SaLoginParameter {
return this;
}
/**
* @return Cookie 配置对象
*/
public SaCookieConfig getCookie() {
return cookie;
}
/**
* @param cookie Cookie 配置对象
* @return 对象自身
*/
public SaLoginParameter setCookie(SaCookieConfig cookie) {
this.cookie = cookie;
return this;
}
/*
* toString
*/
@ -546,6 +590,7 @@ public class SaLoginParameter {
+ ", isWriteHeader=" + isWriteHeader
+ ", terminalTag=" + terminalExtraData
+ ", rightNowCreateTokenSession=" + rightNowCreateTokenSession
+ ", cookie=" + cookie
+ "]";
}

View File

@ -32,6 +32,14 @@ StpUtil.login(10001, new SaLoginParameter()
.setReplacedRange(SaReplacedRange.CURR_DEVICE_TYPE) // 顶人下线的范围: CURR_DEVICE_TYPE=当前指定的设备类型端, ALL_DEVICE_TYPE=所有设备类型端
.setOverflowLogoutMode(SaLogoutMode.LOGOUT) // 溢出 maxLoginCount 的客户端,将以何种方式注销下线: LOGOUT=注销下线, KICKOUT=踢人下线, REPLACED=顶人下线
.setRightNowCreateTokenSession(true) // 是否立即创建对应的 Token-Session true=在登录时立即创建false=在第一次调用 getTokenSession() 时创建)
.setupCookieConfig(cookie->{ // 设置 Cookie 配置项
cookie.setDomain("sa-token.cc"); // 设置:作用域
cookie.setPath("/shop"); // 设置:路径 (一般只有当你在一个域名下部署多个项目时才会用到此值。)
cookie.setSecure(true); // 设置:是否只在 https 协议下有效
cookie.setHttpOnly(true); // 设置:是否禁止 js 操作 Cookie
cookie.setSameSite("Lax"); // 设置第三方限制级别Strict=完全禁止Lax=部分允许None=不限制)
cookie.addExtraAttr("aa", "bb"); // 设置:额外扩展属性
}
);
```