2014-02-02 4 views
0

Я работаю на веб-портале портала веб-портала. Допустим, что портал находится на a.whereiwork.com и имеет много портлетов wsrp, а также несколько портлетов iframed, которые указывают на страницы в другом субдомене, b.whereiwork.com (унаследованное приложение, которому также принадлежит кодовая база). У нас есть текущая проблема, когда пользователи выходят из портала, но когда они заходят в свою сессию на b.whereiwork.com, сохраняются, и у нас есть некоторые проблемы с получением идентификатора JSESSION, очищенного от этого поддомена.как аннулировать сеанс пользователя

Это серьезная проблема с безопасностью, так как следующим пользователем для входа на этот компьютер может быть не один и тот же пользователь (например, кто-то регистрируется, а его жена регистрируется и видит данные со своей сессии).

Одна вещь, которую мы решили попробовать, - добавить iframe к поддомену на странице выхода, что делает недействительным сеанс на подобласте. Безопасность немного отличается от другого субдомена, и это сложнее, чем я могу действительно заняться здесь. Поверьте мне на слово - это не сработает.

Лучшая идея, которую мы имеем сейчас, это добавить фильтр сервлетов верхнего уровня на b.whereiwork.com, который проверяет, изменился ли файл cookie безопасности, а затем вызывает session.invalidate(). Таким образом, если пользователь выйдет из системы, мы можем оставить их сессию как есть, если они не попытаются войти в систему. Мы можем обнаружить, что это другой логин, потому что логин отслеживается в отдельном файле cookie.

Так что мой вопрос. Есть ли проблема с вызовом session.invalidate() в фильтрах верхнего уровня. Предположим, что другим фильтрам в цепочке фильтров необходимо будет создавать объекты в сеансе. Предполагаю ли я после вызова invalidate в сеансе, что страница вернет другой JSESSIONID?

Любые другие предложения, которые могут быть более чистыми, будут оценены по достоинству.

ответ

0

Ive решил использовать jsonp для отправки сообщения crossdomain другому домену, чтобы очистить сеанс. Кажется, работает.

+0

Как бы вы справились с такими проблемами, как тайм-аут сеанса в основном домене или перезапуск основного сервера домена. –

0

Лучшим подходом будет иметь тот же токен безопасности на разных серверах. Но, как вы сказали, это невозможно. Следующим решением может быть использование HTTPSessionListener для очистки сеанса, когда пользователь выходит из основного домена или когда сеанс отключается. Это обеспечит синхронизацию сеансов между доменами.

Смежные вопросы