spring-boot - 无法识别会话到期并重定向到会话到期页面
问题描述
我正在尝试使用 Spring Boot 开发一个 Web 应用程序。
我一直在尝试为请求过滤器中的 Http 会话处理找到一些解决方案。
我试图找出请求中的会话时间并重定向到会话过期页面。我的会话超时属性设置如下
server:
session:
timeout: 180
cookie:
max-age: 180
我想解释一下我到目前为止尝试过的方法。我写了一个过滤器,它是请求过滤器,如下所述
public class MonitoringFilter extends GenericFilterBean{
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
if(!request.isRequestedSessionIdValid()){
//Session has expired
}
chain.doFilter(request, response);
}
我必须以某种方式组合一个条件来区分用户第一次请求[当用户从浏览器登录时]和会话超时后来自浏览器的请求。
在这两种情况下request.isRequestedSessionIdValid()
都是错误的,我也尝试过使用session.isNew()
which 也不会出现,因为 session 为空。
if(!request.isRequestedSessionIdValid()){
//Session has expired
}
上述情况将false
同时出现在登录请求和会话超时请求的情况下。
我也尝试过request.getRequestedSessionId()
在会话被销毁后它将为空。
请给我一些建议或任何方法来处理这种情况。
解决方案
推荐阅读
- flutter - Flutter:local_auth:^0.6.1:PlatformException(错误,您需要在此活动中使用 Theme.AppCompat 主题(或后代)。,null)
- python - 使用分数距离作为 Python 中高维数据集的 K 均值聚类的距离度量
- rabbitmq - 如何使用 RabbitMQ 管理插件将字节数组发布到队列?
- c++ - 二维向量 for-loop c++
- go - use direnv then the gopls error said can't import fmt
- dart - Dart pub.dev 显示“没有有效的 SDK”
- python - Python wrapper for C++ class (when only ".h" and ".dll" files are available)
- c++ - Why do I need to use std::this_thread::yield() for this program to work correctly?
- bash - Can't seem to use more than one -c argument for tesseract
- java - How to run code multiple times in Java Android Studio