Spring Security делает недействительными сессии http в нескольких приложениях? - PullRequest
1 голос
/ 18 октября 2019

У меня есть два отдельных веб-приложения на Java, запущенные на моем локальном компьютере в отдельных экземплярах Tomcat 9 через мою IntelliJ IDE. Один находится на порту 8080, другой - на порту 8081. Оба используют Spring (5.1.4) + Spring Security (3.2.5), и я повторно использовал большую часть кода между двумя приложениями для их запуска и работы.

Проблема, с которой я сталкиваюсь, заключается в том, что если я успешно войду в Приложение A (: 8080), то открою новую вкладку браузера в Приложении B (: 8081) и не выполню попытку входа в систему, если я обновлю Приложение AВкладка, которая также теперь вышла из системы.

Какой параметр конфигурации должен быть уникальным для двух приложений, чтобы они не перехватывали друг друга? Точно так же я хотел бы иметь возможность входить в оба одновременно в одном сеансе браузера без помех ...

Вот мой конфиг веб-безопасности - оба в значительной степени идентичны, ЗА ИСКЛЮЧЕНИЕМ значения ключа RememberMe:

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
             .authorizeRequests()
             .antMatchers("/secure/**")
             .access("hasRole('MEMBER')")
         .and()
             .formLogin()
             .loginPage("/Login")
             .failureUrl("/Login?error=true")
             .defaultSuccessUrl("/Master")
             .usernameParameter("username")
             .passwordParameter("password")
             .loginProcessingUrl("/j_spring_security_check")
             .permitAll()
         .and()
             .logout()
             .invalidateHttpSession(true)
             .logoutUrl("/j_spring_security_logout")
             .logoutSuccessUrl("/Login?logout=true")
         .and()
             .csrf()
         .and()
             .rememberMe()
             .key("UNIQUE_KEY_APP_XYZ")
         .and()
             .userDetailsService(userDetailsService())
             .exceptionHandling()
             .accessDeniedPage("/Login?expired=true")
         .and()
             .sessionManagement()
             .maximumSessions(5)
             .expiredUrl("/Login?expired=true");


    if (this.enableHttps) {
        http.requiresChannel().anyRequest().requiresSecure();
    }
}

Мои классы web.xml и dispatcher-servlet.xml довольно просты, но могут включать их при необходимости. Из параметров запуска сервера IntelliJ Tomcat мне тоже ничего не стоит.

Стоит отметить, что они используют один и тот же каталог приложений Tomcat / home ...

Любая помощь или указатели приветствуются.

РЕДАКТИРОВАТЬ:Новое Откровение:

Если я запускаю Приложение A с контекстом Приложения по умолчанию ("/") и Приложение B с отдельным контекстом ("/ SecondApp"), вышеупомянутая проблема вообще не возникает,То есть я могу получить доступ к приложению A по адресу localhost: 8080 / и приложению B по адресу localhost: 8081 / SecondApp, и теперь у меня нет этой проблемы с сессией. Я думаю, что обновленный вопрос будет, как я могу запустить их обоих на localhost: 808X / без вышеуказанной поведенческой проблемы сессии?

Полагаю, это больше проблема Tomcat, чем проблема Spring?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...