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:
parent
bb5ceb1dc0
commit
c289ec572d
sa-token-core/src/main/java/cn/dev33/satoken/stp
sa-token-doc/up
@ -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);
|
||||
}
|
||||
|
@ -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
|
||||
+ "]";
|
||||
}
|
||||
|
||||
|
@ -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"); // 设置:额外扩展属性
|
||||
}
|
||||
);
|
||||
```
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user