因此,我将尝试总结可能的最佳方法:
1)Tomcat会话到期时间为20分钟
2)用户发出请求并获得sessionID 123
3)用户休息
4)用户回来并单击应用程序中的链接
5)Tomcat删除了会话,因此会话ID无效
现在我想发生的是调用invalidSessionStrategy
钩子以清除Cookie中的sessionID
并向我的Angular代码返回401
以提示用户继续反馈。
我遇到的问题是SessionManagementFilter中的这段代码:
if (request.getRequestedSessionId() != null && !request.isRequestedSessionIdValid()) {
if (this.logger.isDebugEnabled()) {
this.logger.debug("Requested session ID " + request.getRequestedSessionId() + " is invalid.");
}
if (this.invalidSessionStrategy != null) {
this.invalidSessionStrategy.onInvalidSessionDetected(request, response);
return;
}
}
由于Tomcat终止了会话,并且会话ID不再存在,因此getRequestedSessionId() !== null
将返回false
并绕过我的钩子。
isRequestedSessionIdValid()
已检查getRequestedSessionId()
是否为null,如果为null,则返回false。第一次检查getRequestedSessionId()
阻止了我回拨invalidSessionStrategy
的电话。
有人经历过吗?我曾尝试继承,但由于私有成员而无法继承。其他人有什么想法吗?
非常感谢您!