如何为过期的会话覆盖SessionManagement筛选器

时间:2019-03-27 19:09:06

标签: session spring-security

因此,我将尝试总结可能的最佳方法:

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的电话。

有人经历过吗?我曾尝试继承,但由于私有成员而无法继承。其他人有什么想法吗?

非常感谢您!

0 个答案:

没有答案