Тайм-ауты неверны для сервлета в весенней загрузке - PullRequest
0 голосов
/ 24 сентября 2019

Это свойства удаленного сервера:

server.servlet.session.timeout=3m

SAme для моих local.properties

также у нас есть такой конфиг:

 http
                .sessionManagement()
                .sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED)
                .invalidSessionUrl("/login?invalidSession")//dokunma
                .maximumSessions(1)//
                .maxSessionsPreventsLogin(true)//
                .expiredUrl("/login?expired")
                .sessionRegistry(sessionRegistry());

У нас есть такой класс:

@Bean // Http Listener
public HttpSessionListener httpSessionListener() {
    return new HttpSessionListener() {
        @Override
        public void sessionCreated(HttpSessionEvent se) {

            HttpSession session = se.getSession();

            if (session != null) {
              LoggerService.logger.info("sessionCreated sessionid: {}, setMaxInactiveInterval: {}, ipaddress: {}",
                        session.getId(), session.getMaxInactiveInterval(), SecurityUtil.getIpAddress());

Я сделал это, чтобы увидеть внутреннее время.

Но на сервере я вижу этот журнал:

sessionCreated sessionid: 342E6139B2FE108D26537C9D684FBFF3, setMaxInactiveInterval: 1800, ipaddress: null

Это должно быть 180 , а не 1800. Почему оно умножается?

У нас нет других кодов, чтобы установить это.Например:

request.getSession(false).setMaxInactiveInterval(11);

У нас этого нет.Но я воспользуюсь этим, если не смогу найти какое-либо решение.

Например, для удаленного я изменил на это:

server.servlet.session.timeout=44s

Но то, что я вижу, это:

sessionCreated sessionid: 7C3573FE7B5FB6C8939DF8BF60B1B550, setMaxInactiveInterval: 1800, ipaddress: null

Tomcat9 делает это?

На моем локальном компьютере я использую эти свойства для проверки.

Итак

server.servlet.session.timeout=44s

для конфигураций базы данных локального и удаленного сервера длямой локальный.

Но на этот раз:

 sessionCreated sessionid: 747E6BF3DCD061DFF306325FE4FD76B6, getMaxInactiveInterval: 60, ipaddress: 0:0:0:0:0:0:0:1
747E6BF3DCD061DFF306325FE4FD76B6    0:0:0:0:0:0:0:1 Session Created

Что я делаю не так?

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

  LoggerService.logger.info("onAuthenticationSuccess sessionid: {}, getMaxInactiveInterval: {}, ipaddress: {}",
                    session.getId(), session.getMaxInactiveInterval(), SecurityUtil.getIpAddress());

            request.getSession(false).setMaxInactiveInterval(55);

            LoggerService.logger.info("onAuthenticationSuccess sessionid: {}, getMaxInactiveInterval: {}, ipaddress: {}",
                    session.getId(), session.getMaxInactiveInterval(), SecurityUtil.getIpAddress());

Если я введу свой логин-пароль, я увижу это:

   : onAuthenticationSuccess sessionid: F796EA6C54D8BCA239A36E02C4A7A030, getMaxInactiveInterval: 60, ipaddress: 0:0:0:0:0:0:0:1

  : onAuthenticationSuccess sessionid: F796EA6C54D8BCA239A36E02C4A7A030, getMaxInactiveInterval: 55, ipaddress: 0:0:0:0:0:0:0:1

Я также сделал это:

@Bean // Http Listener
public HttpSessionListener httpSessionListener() {
    return new HttpSessionListener() {
        @Override
        public void sessionCreated(HttpSessionEvent se) {

            HttpSession session = se.getSession();

            if (session != null) {
              LoggerService.logger.info("sessionCreated sessionid: {}, setMaxInactiveInterval: {}, ipaddress: {}",
                        session.getId(), session.getMaxInactiveInterval(), SecurityUtil.getIpAddress());

                session.setMaxInactiveInterval(55);

              LoggerService.logger.info("sessionCreated sessionid: {}, setMaxInactiveInterval: {}, ipaddress: {}",
                        session.getId(), session.getMaxInactiveInterval(), SecurityUtil.getIpAddress());

Это тоже самое:

sessionCreated sessionid: FFA7DC9A6558951F1CB790AD9D804F88, getMaxInactiveInterval: 60, ipaddress: null
sessionCreated sessionid: FFA7DC9A6558951F1CB790AD9D804F88, getMaxInactiveInterval: 55, ipaddress: null
FFA7DC9A6558951F1CB790AD9D804F88    0:0:0:0:0:0:0:1 Session Created

Для удаленного я протестировал тот же код, и он также работал, но я не хочу устанавливать программно

sessionCreated before sessionid: 38EC29F7C9C45B34D1FDF05B1F90DC3A, getMaxInactiveInterval: 1800, ipaddress: 192.ss

sessionCreated after sessionid: 38EC29F7C9C45B34D1FDF05B1F90DC3A, getMaxInactiveInterval: 180, ipaddress: 192.ss

Итак, есть две проблемы:

  1. Почему значение тайм-аута свойств удаленного приложения не работает для локального?
  2. Почему удаленный тайм-аут умножается на 10 (свойства имеют 3 м, но журнал показывает 1800 с)

1 Ответ

2 голосов
/ 24 сентября 2019

Свойства server.* используются для управления встроенным контейнером , используемым Spring Boot.Spring Boot создаст экземпляр контейнера сервлета, используя один из ServletWebServerFactory экземпляров.Эти классы используют свойства server.* для настройки управляемого контейнера сервлета (tomcat, jetty и т. Д.).

Однако при развертывании приложения в виде файла war на экземпляре Tomcat свойства server.* не применяются.Они не применяются, потому что предварительно настроенный контейнер сервлета доступен (так как это удаленно запущенная служба).Поэтому развертывание на удаленном Tomcat сделает свойства server.* бесполезными.

Относительно времени ожидания сеанса в минутах.Spring Boot преобразует свойство session.servlet.session.timeout в минуты , поэтому 44s или 55s будут автоматически преобразованы в 1 минуту.Установка значения менее минуты также не имеет особого смысла, поскольку Tomcat делает недействительным сеанс с потоком, работающим каждую минуту.

...