这句话利用cookie保存了当前登录用户的token。
谷歌浏览器查看cookie方式:右上角有三个点的按钮 - 设置
搜索localhost,找到satoken,这就是上面代码中getTokenName()方法的返回值
步骤 6 sa-token为什么能获取到response对象?SaHolder的秘密。。。(深挖,看不懂就跳过,没事)
===========================================================
之前我也一直想不通一个问题,sa-token用起来也太方便了吧,就这么一句话,什么都搞定了。我也不需要去关心session,也不要管HttpServletResponse啥的。
秘密就在这:
SaResponse response = SaHolder.getResponse();
SaHolder调用getResponse方法得到SaResponse, 这个SaResponse是一个接口
package cn.dev33.satoken.context.model;
/**
-
Response 包装类
-
@author kong
*/
public interface SaResponse {
/**
-
获取底层源对象
-
@return see note
*/
public Object getSource();
/**
-
删除指定Cookie
-
@param name Cookie名称
*/
public void deleteCookie(String name);
/**
-
写入指定Cookie
-
@param name Cookie名称
-
@param value Cookie值
-
@param path Cookie路径
-
@param domain Cookie的作用域
-
@param timeout 过期时间 (秒)
*/
public void addCookie(String name, String value, String path, String domain, int timeout);
/**
-
在响应头里写入一个值
-
@param name 名字
-
@param value 值
-
@return 对象自身
*/
public SaResponse setHeader(String name, String value);
/**
-
在响应头写入 [Server] 服务器名称
-
@param value 服务器名称
-
@return 对象自身
*/
public default SaResponse setServer(String value) {
return this.setHeader(“Server”, value);
}
/**
-
重定向
-
@param url 重定向地址
-
@return 任意值
*/
public Object redirect(String url);
}
我们目前只用了addCookie方法,然后再看SaResponse的实现类
只有一个实现类,addCookie方法如下:
/**
- 写入指定Cookie
*/
@Override
public void addCookie(String name, String value, String path, String domain, int timeout) {
Cookie cookie = new Cookie(name, value);
if(SaFoxUtil.isEmpty(path) == true) {
path = “/”;
}
if(SaFoxUtil.isEmpty(domain) == false) {
cookie.setDomain(domain);
}
cookie.setPath(path);
cookie.setMaxAge(timeout);
response.addCookie(cookie);
}
和我们预期的是一致的。
现在的问题是,SaHolder究竟是怎么getResponse的?
代码如下&