Делают ли приложения с безопасностью Spring разделяют SecurityContextHolder среди них

У меня два разных приложения, скажем A и. Оба используют Spring Security с одинаковой конфигурацией. Вот моя ситуация:

Я вхожу в свое A приложение. Все нормально работает. Но когда я вхожу в свое B приложение (у него тот же IP, но другой ПОРТ) на другой вкладке в том же браузере, я вижу эти строки (ниже), и меня выкидывает из приложения A, что означает, что я больше не аутентифицирован в Это.

DEBUG 2013-05-20 13: 42: 43 969 [http-8080-2] org.springframework.security.web.FilterChainProxy $ VirtualFilterChain: /webapp/backoffice/index.jsp на позиции 2 из 12 в дополнительной цепочке фильтров; фильтр активации: 'SecurityContextPersistenceFilter'

DEBUG 2013-05-20 13:42: 43,969 [http-8080-2] org.springframework.security.web.context.HttpSessionSecurityContextRepository: HttpSession в настоящее время не существует

DEBUG 2013-05-20 13: 42: 43 969 [http-8080-2] org.springframework.security.web.context.HttpSessionSecurityContextRepository: Нет SecurityContext был доступен из HttpSession: null. Будет создан новый.

  1. Я использую HttpSessionSecurityContextRepository как SecurityContextRepository.
  2. Я включил SessionMigration в целях безопасности.
  3. Я использую ConcurrentSessionFilter, чтобы предотвратить вход в систему через два или более устройств.

Но я не понимаю, почему при входе в мое B приложение удаляется HttpSession из A приложения? (Или, может быть, происходит что-то еще)

Я хочу знать, имеют ли эти приложения что-то общее в браузере.


Когда меня спрашивают об их IP / ПОРТАХ, вы должны знать, что их IP-адреса одинаковы (оба localhost), но у них разные порты.
A) localhost: 8080 / dtts / backoffice
B) localhost: 8081 / dtts / backoffice
РЕШЕНО
Проблема заключалась в том, что для каждого URL/Path был уникальный JSESSIONID. Оба моих приложения используют URL:localhost и Path:dtts. Поэтому второй JSESSIONID заменяет первый.


person Matin Kh    schedule 20.05.2013    source источник
comment
Отличаются ли IP-адрес и порт для каждого приложения? Я бы рекомендовал использовать такой инструмент, как Fiddler, для анализа трафика, идущего назад и вперед к каждому веб-приложению, особенно содержимого файлов cookie JSESSIONID.   -  person kevin847    schedule 20.05.2013
comment
Пожалуйста, предоставьте URL-адреса A и B   -  person Maksym Demidas    schedule 21.05.2013
comment
Обновил ответ. Их IP-адреса одинаковы (оба localhost), но у них разные порты (A использует 8080, а B использует 8081)   -  person Matin Kh    schedule 22.05.2013


Ответы (1)


Файл cookie из приложения B перезаписывает файл cookie, хранящийся в браузере для приложения A, потому что оба файла cookie принадлежат одному и тому же серверу, то есть localhost, и оба файла cookie имеют имя, то есть JSESSIONID.

Файлы cookie не зависят от порта. Это обсуждается в следующем вопросе: Определен ли порт cookie HTTP?

Я считаю, что у вас есть следующие варианты:

  • Используйте другой IP-адрес или имя сервера для доступа к каждому приложению (например, localhost и 127.0.0.1 или applicationA.mydomain.com и applicationB.mydomain.com)
  • Используйте другое имя для файла cookie сеанса в контейнере, в котором работает каждое приложение.
person kevin847    schedule 23.05.2013
comment
Звучит логично! Как я могу использовать разные имена файлов cookie сеанса для этих приложений? - person Matin Kh; 25.05.2013
comment
При использовании tomcat 7 это атрибут sessionCookieName в Context.XML. см. документы здесь: tomcat.apache.org/ - person kevin847; 25.05.2013
comment
Я прочитал документ, и в нем говорится, что не рекомендуется менять имя JSESSIONID на какое-либо другое, поскольку сервлет использует это имя по умолчанию. - person Matin Kh; 28.05.2013
comment
Да, первый вариант, безусловно, лучший способ исправить это, если это возможно в вашей модели развертывания. - person kevin847; 28.05.2013
comment
Оказалось, что он привязан к конкретному пути и не связан с портом. Таким образом, будет уникальный JSESSIONID для каждого URL/Path. Моя проблема заключалась в том, что два приложения также использовали один и тот же Path. - person Matin Kh; 28.05.2013
comment
Круто, спасибо за обновление. Я не могу порекомендовать Fiddler для решения такого рода проблем, кстати. Ваше здоровье. - person kevin847; 28.05.2013