Вызывает IllegalStateException при помещении значений в ConcurrentHashMap - PullRequest
0 голосов
/ 13 марта 2019

Проблемы: Иногда возникает ошибка IllegalStateException при помещении loginID и сеанса в ConcurrentHashMap.

Справочная информация: , чтобы избежать одновременного входа в систему, я сохраняю loginID с сеансом http как ConcurrentHashMap вконтекст сервлета.Каждый успешный вход в систему, чтобы проверить, существует ли loginID в ConcurrentHashMap в контексте сервлета.Если существует, аннулируйте предыдущий сеанс и сохраните текущий сеанс.

at com.ibm.ws.session.http.HttpSessionImpl.invalidate(HttpSessionImpl.java:302) 
at com.ibm.ws.session.SessionData.invalidate(SessionData.java:247) 
at com.ibm.ws.session.HttpSessionFacade.invalidate(HttpSessionFacade.java:200) 
at xxx.xxx.xxx.xxx.LoginCommand.doPost(LoginCommand.java:184)

doPost(...) {
    ServletContext application = session.getServletContext();
    Map<String, Object> loginMap = (Map<String, Object>)application.getAttribute("loginMap");
    if(loginMap == null) {
        loginMap = new ConcurrentHashMap<String, Object>();
    }
    for(String loginID : loginMap.keySet()) {
        if(loginID.equals(request.getParameter("user_id")) {
            ((HttpSession)loginMap.get(loginID)).invalidate();
            break;
        }
    }

    //LINE 184. Here sometimes throws IllegalStateException
    loginMap.put(request.getParameter("user_id"), session);

    application.setAttribute("loginMap", loginMap);
}
...