изменение идентификатора сессии и копирование атрибутов после входа в систему - PullRequest
3 голосов
/ 18 мая 2011

В моем приложении используются сервлеты java, jsp и tomcat 6. Мне нравится реализовывать изменение идентификатора сеанса и я хочу скопировать старые атрибуты сеанса в новый после входа в систему. Мы начали использовать немного весны в этом. Какой лучший способ добавить эту функцию в 10-летнее приложение, подобное этому.

Ответы [ 3 ]

9 голосов
/ 18 мая 2011

Если вы используете Spring Security, фреймворк должен изменить идентификатор сеанса после входа в систему по умолчанию.

@ см. FAQ по безопасности Spring :

Почемуидентификатор сеанса изменяется, когда я аутентифицируюсь через Spring Security?

При конфигурации по умолчанию Spring Security делает недействительным существующий сеанс, когда пользователь аутентифицируется, и создает новый, передавая ему данные сеанса.Намерение состоит в том, чтобы изменить идентификатор сеанса, чтобы предотвратить атаки «фиксации сеанса».Вы можете найти больше об этом в Интернете и в справочном руководстве


Если вы не используете Spring (Security), вы должны сделать это самостоятельно.Немного так:

public class Login extends HttpServlet {
...
    HttpSession session = request.getSession();
    Map<String,Object> values = session.GetAll(); //This line is psydo code
    //Use getValueNames() and a loop with getValue(String name);

    // Kill the current session
   session.invalidate();

   HttpSession newSession = request.getSession(true);
   newSession.putAllValues(values); //This line is psydo code
... 
1 голос
/ 31 декабря 2016
    session=request.getSession(true);
    Enumeration keys = session.getAttributeNames();     
    HashMap<String,Object> hm=new HashMap<String,Object>();  
    while (keys.hasMoreElements())
    {
      String key = (String)keys.nextElement();
      hm.put(key,session.getValue(key));
      session.removeAttribute(key);      
    }
    session.invalidate();
    session=request.getSession(true);
    for(Map.Entry m:hm.entrySet())
    {
      session.setAttribute((String)m.getKey(),m.getValue());  
      hm.remove(m);
    }  
0 голосов
/ 13 августа 2012

Это может помочь

Cookie cookie = new Cookie("JSESSIONID", null);
cookie.setPath("/");
cookie.setMaxAge(0);
response.addProperty(cookie);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...