Shiro + Redis自定义session会话管理
博客:Shiro + Redis自定义session会话管理
此图非常重要!!!镇楼
0x001 重写SessionManager
shiro提供了三种默认实现:
- DefaultSessionManager: 用于java se 环境
- ServletContainerSessionManager:默认使用的实现,Servlet容器管理
- DefaultWebSessionManager:自己维护
重写SessionManager
需要继承DefaultWebSessionManager
类
目的:自定义从header
中的Authorization
获取token
public class CustomSessionManager extends DefaultWebSessionManager {
@Override
protected Serializable getSessionId(ServletRequest request, ServletResponse response) {
String id = WebUtils.toHttp(request).getHeader("Authorization");
if (StringUtils.isEmpty(id)) {
// 获取sessionId,id可以自定义
return super.getSessionId(request, response);
} else {
//返回sessionId;固定套路
request.setAttribute(ShiroHttpServletRequest.REFERENCED_SESSION_ID_SOURCE, "header");
request.setAttribute(ShiroHttpServletRequest.REFERENCED_SESSION_ID, id