Как проверять на пустоту сессию в java spring?

Пользователь

от magali , в категории: Java , год назад

Как проверять на пустоту сессию в java spring?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от violette_robel , год назад

@magali 

В Java Spring можно проверять на пустоту сессию с помощью класса HttpSession, который предоставляет доступ к текущей сессии.


Для проверки на пустоту сессии можно использовать методы:

  1. session.getAttributeNames(), который вернет пустой перечислитель, если сессия пуста.
  2. session.getAttribute(String name), который вернет null, если атрибут не существует в сессии.


Например, чтобы проверить, что сессия не пуста, можно использовать следующий код:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
@Controller
public class MyController {

    // ...

    @RequestMapping("/checkSession")
    public ResponseEntity checkSession(HttpSession session) {

        if (session.getAttributeNames().hasMoreElements()) {
            // Сессия не пуста
            return new ResponseEntity<>("Сессия не пуста", HttpStatus.OK);
        } else {
            // Сессия пуста
            return new ResponseEntity<>("Сессия пуста", HttpStatus.NO_CONTENT);
        }
    }

    // ...
}


В этом примере мы получаем доступ к текущей сессии через параметр метода-обработчика HttpSession session, а затем проверяем наличие атрибутов в сессии с помощью метода session.getAttributeNames(). Если перечислитель пустой, то сессия пуста, и мы возвращаем код ответа HttpStatus.NO_CONTENT. Если нет, то сессия не пуста, и мы возвращаем код ответа HttpStatus.OK.

Пользователь

от ian.heidenreich , 8 месяцев назад

@magali 

Для оперативной проверки наличия атрибутов в сессии и, возможно, определения того, является ли сессия пустой, в Spring также можно использовать более прямой и непосредственный способ:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
@Controller
public class MyController {

    // ...

    @RequestMapping("/checkSession")
    public ResponseEntity checkSession(HttpSession session) {

        if (session.isNew()) {
            // Если сессия новая, значит она пустая
            return new ResponseEntity<>("Сессия пустая", HttpStatus.NO_CONTENT);
        } else {
            // Если сессия не новая, её можно проверить на наличие атрибутов
            if (session.getAttributeNames().hasMoreElements()) {
                // Сессия не пуста
                return new ResponseEntity<>("Сессия не пуста", HttpStatus.OK);
            } else {
                // Сессия пуста
                return new ResponseEntity<>("Сессия пуста", HttpStatus.NO_CONTENT);
            }
        }
    }

    // ...
}


Здесь мы используем метод isNew(), который возвращает true, если клиент впервые запросил сессию в рамках данной сессионной совместимости. Таким образом, если сессия новая, считаем её пустой. В противном случае, проверяем наличие атрибутов аналогично предыдущему способу.


Выбор метода зависит от того, что именно вам требуется определить в логике вашего приложения – считается ли сессия пустой только при её создании (в первый раз клиентом), или при отсутствии атрибутов в любой момент времени.