Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Инвалидировать чужую http сессию / 25 сообщений из 40, страница 1 из 2
23.11.2016, 18:40
    #39352979
rabiter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инвалидировать чужую http сессию
Всем привет!

Подскажите, как лучше (и можно ли вообще) инвалидировать чужую сессию?

Я могу сохранить все сессии в какую-нибудь глобальную мапу и получить инстанс HttpSession по имени пользователя, допустим - не вопрос. Но на сколько безопасно вызывать метод invalidate() на такой "сохраненной" (т.е. полученной не законным путем с точки зрения контейнера сессии). Я могу так же не вызывать invalidate а вызвать setMaxInactiveInterval(1) допустим, что тоже проинвалидирует сессию. Но вопрос - не огребусь ли я потом проблем с таким решением?

Спасибо!
...
Рейтинг: 0 / 0
23.11.2016, 19:12
    #39353006
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инвалидировать чужую http сессию
rabiter,

Ну а как админы работают?
Не сам же юзверь делает себе харакири.
Думаю это штатная работа.
...
Рейтинг: 0 / 0
23.11.2016, 19:14
    #39353007
rabiter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инвалидировать чужую http сессию
Чутье мне подсказывает что не все так просто
...
Рейтинг: 0 / 0
23.11.2016, 21:13
    #39353072
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инвалидировать чужую http сессию
rabiter,
а что происходит при превышении времени сессии?
для сервера все сессии свои, чужих нет.
...
Рейтинг: 0 / 0
23.11.2016, 22:17
    #39353112
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инвалидировать чужую http сессию
вадядля сервера все сессии свои, чужих нет.
) действительно.

rabiterЧутье мне подсказывает что не все так просто
а ты проверь чуйку. Напиши строчку и нажми "Пуск".
...
Рейтинг: 0 / 0
23.11.2016, 22:34
    #39353128
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инвалидировать чужую http сессию
rabiterЧутье мне подсказывает что не все так просто
я при превышение времени бездествия юзера с сервером - инвалидирую сессию, и командой с сервера перевожу браузер на страницу авторизации.
...
Рейтинг: 0 / 0
23.11.2016, 23:46
    #39353191
rabiter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инвалидировать чужую http сессию
Petro123rabiterЧутье мне подсказывает что не все так просто
а ты проверь чуйку. Напиши строчку и нажми "Пуск".
Проверить-то я проверю. Оно сейчас заработает, а на другом сервере или в кластере возьмет и не заработает. Мне надо наверняка знать.
...
Рейтинг: 0 / 0
23.11.2016, 23:53
    #39353195
rabiter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инвалидировать чужую http сессию
вадяrabiterЧутье мне подсказывает что не все так просто
я при превышение времени бездествия юзера с сервером - инвалидирую сессию, и командой с сервера перевожу браузер на страницу авторизации.

Вы понимаете, почему я сомневаюсь, мы ведь не знаем, что там за HttpSession сервер нам подсовывает, чтобы так вот взять и сохранить в глобальной HashMap и потом переиспользовать. А вдруг это вообще какая-нибудь прокси или обертка, которая фиг знает куда ведет. Сейчас к сессии, а потом внутри у сервака что-нибудь щелкнуло, он что-нибудь у себя подчистил, и вуаля, в руках у тебя голая прокси или обертка, на которой хоть завызывайся invalidate. Вы понимаете? Но у вас почти такой же сценарий, что и в моем случае. Мне надо собственный механизм инвалидации сессии сделать. Для этого и хотел сохранять сессии. Говорите у вас никаких проблем не было с такой имплементацией?
...
Рейтинг: 0 / 0
23.11.2016, 23:57
    #39353201
rabiter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инвалидировать чужую http сессию
Вот здесь, например, пишут, что не стоит так делать
http://stackoverflow.com/questions/13793119/store-and-invalidate-java-httpsession-from-different-user
...
Рейтинг: 0 / 0
24.11.2016, 05:54
    #39353278
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инвалидировать чужую http сессию
rabiter,
это не стоит делать в том случае , если юзер активно работает и его работа прерывается.
если юзер не взаимодействует с сервером - считается, что он не работает со страницей. это, конечно, чисто условное правило.
тогда и можно инвалидировать сессию.
...
Рейтинг: 0 / 0
24.11.2016, 07:59
    #39353305
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инвалидировать чужую http сессию
rabiter,
поставь время сессии в 2 минуты и посмотри что будет. весь вопрос сводится к цели прерывания сессии.
...
Рейтинг: 0 / 0
24.11.2016, 08:53
    #39353337
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инвалидировать чужую http сессию
Аффтар! Термины где то что щелкнуло и где то что почистил это термины домохозяек.
Как обычно тебе лень разбираться со штатным и проще писать мапу.
Я свой каждый кусок кода тестирую. А ты пишешь с закрытым глазом для каких то кластеров на будущее.
...
Рейтинг: 0 / 0
24.11.2016, 09:02
    #39353339
Alexey Tomin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инвалидировать чужую http сессию
rabiterЯ могу сохранить все сессии в какую-нибудь глобальную мапу и получить инстанс HttpSession по имени пользователя, допустим - не вопрос. Но на сколько безопасно вызывать метод invalidate() на такой "сохраненной" (т.е. полученной не законным путем с точки зрения контейнера сессии).

Для начала надо сказать, что за контейнер.
Потому что когда jetty+guice+самопальная авторизация то всё работает именно так.
А если есть spring/javaee/... то надо смотреть, что там УЖЕ ЕСТЬ для этого.
...
Рейтинг: 0 / 0
24.11.2016, 09:08
    #39353342
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инвалидировать чужую http сессию
Есть события старта и конца сессии у каждого юзверя.
Если в api нет поиска, то делаешь свой список.
Потом обнуляешь сессию того кого нужно.
Быстрее попробовать чем обсуждать открыв Ослик и фокс на экране.
...
Рейтинг: 0 / 0
24.11.2016, 10:39
    #39353420
rabiter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инвалидировать чужую http сессию
Petro123Аффтар! Термины где то что щелкнуло и где то что почистил это термины домохозяек.
Как обычно тебе лень разбираться со штатным и проще писать мапу.
Я свой каждый кусок кода тестирую. А ты пишешь с закрытым глазом для каких то кластеров на будущее.

Вы нормальный?
...
Рейтинг: 0 / 0
24.11.2016, 10:41
    #39353423
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инвалидировать чужую http сессию
rabiter,
скажу тебе ещё проще. Ты написал много воды.
И ничего конкретного.
Предлагаю перейти к коду.
...
Рейтинг: 0 / 0
24.11.2016, 10:57
    #39353439
rabiter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инвалидировать чужую http сессию
Сервера приложения могут быть разные в моем случае: wildfly 10, GlassFish 4, в будущем намечается web sphere (хотя надеюсь нет)
Никого разве не смущает сама идея взять и сохранить такой технический объект как httpsession в мапе чтобы из под другого потока взять ее и инвалидовать?
Задача такая - иметь возможность инвалидировать чужие сессии (допустим для администратора)
...
Рейтинг: 0 / 0
24.11.2016, 11:02
    #39353447
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инвалидировать чужую http сессию
rabiterЗадача такая - иметь возможность инвалидировать чужие сессии (допустим для администратора)
У Tomcat в админке есть такое. Уверен у других контейнеров тоже.
...
Рейтинг: 0 / 0
24.11.2016, 11:03
    #39353449
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инвалидировать чужую http сессию
rabiterЧутье мне подсказывает что не все так просто
Ваше чутьё вас обманывает на этот раз.
...
Рейтинг: 0 / 0
24.11.2016, 11:16
    #39353469
rabiter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инвалидировать чужую http сессию
Blazkowicz,

Спасибо! Админка сервера приложений не подойдет, нужна своя страничка.
...
Рейтинг: 0 / 0
24.11.2016, 11:27
    #39353477
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инвалидировать чужую http сессию
rabiterСпасибо! Админка сервера приложений не подойдет, нужна своя страничка.
Своя страничка, которая через JMX работает с контейнером?
Если вас очень сильно пугает перспектива держать коллекцию из HttpSession, то собирайте только jsessionid.
А валидируйте сессию дополнительно фильтром при запросе.
...
Рейтинг: 0 / 0
24.11.2016, 11:47
    #39353500
rabiter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инвалидировать чужую http сессию
Blazkowicz,

Да, как запасной вариант у меня именно валидировать сессию при запросе. Про JMX - никогда не использовал, спасибо за наводку.
...
Рейтинг: 0 / 0
24.11.2016, 11:49
    #39353503
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инвалидировать чужую http сессию
rabiterЗадача такая - иметь возможность инвалидировать чужие сессии (допустим для администратора)
OK
скажу в двадцатый раз.
Для такой задачи ничего изобретать не надо.
Вот, например, у SSO посложнее, т.к. там контроль идёт не на своём сервере, а на том который и даёт общую сессию между серверами.
Для вашей задачи это оверхед.
Удачи!
Код: java
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.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
/*
 * The contents of this file are subject to the Mozilla Public 
 * License Version 1.1 (the "License"); you may not use this 
 * file except in compliance with the License. You may obtain 
 * a copy of the License at http://www.mozilla.org/MPL/
 * 
 * Software distributed under the License is distributed on an 
 * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express 
 * or implied. See the License for the specific language governing
 * rights and limitations under the License.
 *
 *
 * The Original Code is OIOSAML Java Service Provider.
 * 
 * The Initial Developer of the Original Code is Trifork A/S. Portions 
 * created by Trifork A/S are Copyright (C) 2009 Danish National IT 
 * and Telecom Agency (http://www.itst.dk). All Rights Reserved.
 * 
 * Contributor(s):
 *   Joakim Recht <jre@trifork.com>;
 *   Rolf Njor Jensen <rolf@trifork.com>;
 *
 */
package dk.itst.oiosaml.sp.service.session;

import javax.servlet.http.HttpSession;

import org.opensaml.saml2.core.Assertion;

import dk.itst.oiosaml.sp.model.OIOAssertion;

/**
 * Handle session state across requests and instances.
 * 
 * <p>Due to SOAP Logout, it is not possible to store all state in the HTTP session. Instead, implementations of this interface handle session state,
 * primarily based on the HTTP session.<p> 
 * 
 * <p>Implementations are expected to be thread-safe, and should not store any instance state, as a new instance will be created for
 * every request.</p>
 * 
 * @see SessionHandlerFactory
 */
public interface SessionHandler {

	/**
	 * Associate an assertion with a given session.
	 * 
	 * @throws IllegalArgumentException If the assertion is being replayed. Implementations must check that the assertion id has not been seen before.
	 */
	public void setAssertion(String sessionId, OIOAssertion assertion) throws IllegalArgumentException;

	
	/**
	 * @return true if the session is logged in and has a non expired assertion,
	 *         false otherwise. 
	 */
	public boolean isLoggedIn(String sessionId);
	
	/**
	 * Mark a given session as it has been logged out by removing it the
	 * assertion from the session.
	 */
	public void logOut(HttpSession session);
	
	/**
	 * Mark a given session as it has been logged out by removing it the associated
	 * assertion
	 * 
	 * @param sessionId
	 */
	public void logOut(String sessionId);
	
	/**
	 * @return The {@link Assertion} associated with the session. <code>null</code> if there is no assertion.
	 */
	public OIOAssertion getAssertion(String sessionId);
	
	/**
	 * @param sessionIndex
	 *            The sessionIndex from the assertion
	 * @return The sessionId associated with the sessionIndex in case there is
	 *         one, otherwise null
	 */
	public String getRelatedSessionId(String sessionIndex);
	
	public void registerRequest(String id, String receiverEntityID);
	
	
	/**
	 * Remove a request id from the list of registered request ids and return the registered IdP entity id.
	 * @param id
	 * @throws IllegalArgumentException If the request id is unknown.
	 */
	public String removeEntityIdForRequest(String id) throws IllegalArgumentException;

	/**
	 * Clean stored ids and sessions.
	 * 
	 * @param requestIdsCleanupDelay Milliseconds to store assertion ids for replay prevention.
	 * @param sessionCleanupDelay Milliseconds to store session data before purging (in case logout has not been called).
	 */
	public void cleanup(long requestIdsCleanupDelay, long sessionCleanupDelay);
	
	/**
	 * Set the max number of assertion ids to track for replay protection, and reset the cache.
	 * @param maxNum
	 */
	public void resetReplayProtection(int maxNum);

	/**
	 * Save information about a request.
	 * 
	 * The information saved can be retrieved later on using getRequest to replay the request after the user has been authenticated.
	 * 
	 * @return A unique opaque string, no more than 72 characters long.
	 */
	public String saveRequest(Request request);
		
	/**
	 * Get the request for a state identifier.
	 * 
	 * @param state
	 * @throws IllegalArgumentException If the state identifier is unknown.
	 */
	public Request getRequest(String state) throws IllegalArgumentException;
}
...
Рейтинг: 0 / 0
24.11.2016, 11:52
    #39353506
rabiter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инвалидировать чужую http сессию
Кстати, как минимум под WildFly
Код: java
1.
httpRequest.getSession()


Каждый раз для одного и того же пользователя возвращает разные инстансы класса HttpSession:


Это меня и напрягает немного. Т.е. я возьму один из них и сохраню в мапе.
...
Рейтинг: 0 / 0
24.11.2016, 11:54
    #39353508
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Инвалидировать чужую http сессию
rabiterКаждый раз для одного и того же пользователя возвращает разные инстансы класса HttpSession:
в одной сессии?
Выведи в лог 2-3 запроса по одной сессии для одного юзверя.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Инвалидировать чужую http сессию / 25 сообщений из 40, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]