我有一个Spring控制器方法,
@RequestMapping(value = "/resetTimeoutForClient", method =
{RequestMethod.POST, RequestMethod.GET}, produces = "application/json")
public ResponseEntity<String> resetTime(HttpServletRequest request) {
HttpSession session = request.getSession(false);
Date date = java.util.Calendar.getInstance().getTime();
DateFormat formatter =
DateFormat.getDateTimeInstance(DateFormat.MEDIUM,DateFormat.MEDIUM);
JsonObject jsonObjectReturn = new JsonObject();
jsonObjectReturn.addProperty("checkingSessionAt", date.toString());
if (null == session){
jsonObjectReturn.addProperty("sessionIsActive", false);
}
else {
int sessMax = session.getMaxInactiveInterval();
Date lastAccessed = new Date(session.getLastAccessedTime());
String lastAccessedReadable = formatter.format(lastAccessed);
String theSessionID = session.getId();
jsonObjectReturn.addProperty("sessionID", session.getId());
jsonObjectReturn.addProperty("sessionIsActive", true);
}
String testme = jsonObjectReturn.toString();
return new ResponseEntity<>(testme, HttpStatus.OK);
}
此方法的目的是,一旦通过AJAX调用(见下)调用,容器(Oracle Web Logic)将重置会话超时,该超时在web.xml文件中设置为45分钟。
AJAX调用在一个函数中,如下所示:
function sessPingServer() {
return $.ajax({
url: "/mydomain/resetTimeoutForClient",
type: 'GET'
});
}
...并且此AJAX函数的调用者是:
sessPingServer()
.done(function (response) {
if (!response.sessionIsActive){
// Log em out...
sessLogOut();
}
else {
// Restart timers...
}
})
单击模式上“扩展会话”的按钮时,AJAX代码将运行并调用该服务器方法。
所以我有一个简单的问题。从我在几个SO页面上阅读的内容来看,我认为使用此AJAX代码调用controller方法将重置会话超时计时器。它不是。我在控制器方法中设置了断点,并且可以在每次调用该方法时验证会话ID是否相同,并且会话的lastAccessed值正确。
一些聪明的人能告诉我我在做什么错吗?为什么此构造不重置会话计时器?我缺少一些非常明显的东西吗?
谢谢