一、创建一个自定义的session管理类,继承shiro默认的session管理类(DefaultWebSessionManger),重写getSessionId()方法,token为自定义请求头,值传的是sessionid
/**
* 自定义session管理类
*/
public class MyWebSessionManager extends DefaultWebSessionManager {
@Override
protected Serializable getSessionId(ServletRequest request, ServletResponse response) {
HttpServletRequest req = (HttpServletRequest) request;
// 从请求头中获取sessionId
Serializable sessionId = req.getHeader("token");
// 判断是否设置了sessionId
if (!StringUtils.isEmpty(sessionId)){
return sessionId;
}
// 请求头未设置sessionId值,使用shiro默认方式获取
return super.getSessionId(request, response);
}
}
二、在Shiro配置类中创建一个返回安全管理器SecurityManager的bean方法,并设置session管理器为自定义的session管理器
/**
* 服务权限配置中心
*/
@Configuration
public class ShiroConfiguration {
// 将自己的验证方式加