请问Jfinal对session的拦截器如何写?对session是否失效进行判断。

       本人在项目中,遇到一个问题,系统一段时间不操作,再操作的时候就会死机。现诊断是这段时间内,我session的生命周期已经完结。所以session为空了,后面的操作就无法进行。

       现在想做,再次操作系统的时候,判断session还存在吗?如果不存在则自动退出到登录界面。否则,可以进行其他操作。

       先要在config中进行如下配置吗?

me.addGlobalActionInterceptor(new GlobalActionInterceptor());

       具体的拦截器的代码咋写?求波总明示!

评论区

JFinal

2017-05-23 10:12

写个拦截器,然后判断 session 中的相关值是否存在,存在则继续,不存在则重定向到 login 页面,几行代码的事:
Account loginAccount = inv.getController().getSessionAttr("loginAccount");
if (loginAccount != null) {
inv.invoke();
} else {
inv.getController().redirect("/login");
}

JFinal

2017-05-23 10:14

将此拦截器配置为全局拦截器:
me.add(new LoginSessionInterceptor());

此外,很多年前就不这么用了,session 在应用重启时会丢失,无论是开发还是生产环境都非常不便,现在我们做登录 session 维护都是直接写入数据库,然后在数据库与内存间使用缓存提升下性能

由于登录数据是放在数据库中的,当应用断电或重启都无所谓

Ferrari8899

2017-05-23 10:19

@JFinal 謝謝波縂!

JFinal

2017-05-23 10:20

@Ferrari8899 打个官方广告,这类解决方案,现成的代码,在 jfinal club 项目中都有,直接可以使用,可以考虑一下加入俱乐部

Ferrari8899

2017-05-23 12:42

@JFinal 好的,我征求一下领导的意思,毕竟是要公司报销的哈!

JM-java

2018-11-14 15:55

@JFinal 波总,我项目是前后端分离的.我现在想 loginAccount 为空的时候,不执行invoke,也不调用 redirect 重定向.而是直接返回一个值给前端,让前端来做怎么处理呢?

热门反馈

扫码入社