无法延长Web Logic Server上的会话超时

时间:2018-10-19 18:52:31

标签: spring-mvc session session-timeout

我有一个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值正确。

一些聪明的人能告诉我我在做什么错吗?为什么此构造不重置会话计时器?我缺少一些非常明显的东西吗?

谢谢

0 个答案:

没有答案
相关问题