Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / JSF, GlassFish 3.1.2.2 - как вручную удалить cookie JSESSIONID? / 13 сообщений из 13, страница 1 из 1
06.03.2013, 16:55:13
    #38176322
SMAKSx86
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSF, GlassFish 3.1.2.2 - как вручную удалить cookie JSESSIONID?
Помогите, пожалуйста выйти из ситуации.
Есть jsf-приложение. При работе оно сохраняет в браузере cookie с именем JSESSIONID. У этой куки срок действия - до конца сессии. Но браузер на целевой железке работает так, что не закрывается при завершении своего сеанса работы. т.е. процесс iexplore не завершается. Мне нужно каким-то образом удалить эту куку. Из javascript не получается - document.cookies возвращает пустоту. Я так понимаю, эта кука передается в заголовке http-запроса. Как мне избавиться от нее?
...
Рейтинг: 0 / 0
06.03.2013, 16:59:15
    #38176332
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSF, GlassFish 3.1.2.2 - как вручную удалить cookie JSESSIONID?
А в чем глубинный смысл удалять именно куку, если можно просто заэкспарить сессию на сервере?
HttpSession.invalidate()
...
Рейтинг: 0 / 0
06.03.2013, 17:14:00
    #38176377
SMAKSx86
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSF, GlassFish 3.1.2.2 - как вручную удалить cookie JSESSIONID?
В таком случае jsessionid перегенерируется.
Сейчас объясню ситуацию, может, вы мне подскажете, где я накосячил.
Приложение вызывается GET-запросом, в параметре которого передается уникальный идентификатор. Этот идентификатор ловится в ServiceFilter (implements Filter). Дальше приложение работает по POST. В конфиге web.xml время жизни сессии установлено как <session-timeout>5</session-timeout>. Если сессия устаревает, то сервер при повторном GET-запросе выполняет редирект с HTTP-кодом 302 и ServiceFilter не отрабатывает, соответственно не извлекается тот самый уникальный идентификатор. Процесс браузера мы закрыть не можем - железка не позволяет. Кроме того, пользователь по аппаратной кнопке может может вернуться в основное приложение(при этом процесс браузера опять же не завершится) и я не могу отловить этот момент для HttpSession.invalidate(). А показывать следующему пользователю данные сессии предыдущего очень нехорошо. Не могу придумать, как выйти из данной ситуации.
...
Рейтинг: 0 / 0
06.03.2013, 17:18:46
    #38176382
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSF, GlassFish 3.1.2.2 - как вручную удалить cookie JSESSIONID?
SMAKSx86 Если сессия устаревает, то сервер при повторном GET-запросе выполняет редирект с HTTP-кодом 302 и ServiceFilter не отрабатывает, соответственно не извлекается тот самый уникальный идентификатор.
А как должно быть?
SMAKSx86
Кроме того, пользователь по аппаратной кнопке может может вернуться в основное приложение

Аппаратной кнопке? Это что?

SMAKSx86А показывать следующему пользователю данные сессии предыдущего очень нехорошо. Не могу придумать, как выйти из данной ситуации.
И каким образом пользователь должен получить данные предыдущей сессии?
...
Рейтинг: 0 / 0
06.03.2013, 17:29:20
    #38176406
SMAKSx86
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSF, GlassFish 3.1.2.2 - как вручную удалить cookie JSESSIONID?
В общем, целевое устройство - это терминал самообслуживания.
На устройстве работает приложение, которое может вызвать браузер и передать ему управление.
Проблема, в общем, в том, что вызов производится GET-запросом. Из него я выбираю параметр(идентификатор) делается это в ServiceFilter(наследнике javax.servlet.Filter). Проблема в том, что в случае устаревания сессии, этот ServiceFilter не срабатывает и я не могу получить этот параметр. А без него работу нельзя продолжить.
...
Рейтинг: 0 / 0
06.03.2013, 21:22:23
    #38176686
SMAKSx86
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSF, GlassFish 3.1.2.2 - как вручную удалить cookie JSESSIONID?
Мда, почитал свой бардак.
В общем, надо с этой реализацией Filter разбираться, точнее, с тем, как и, самое главное, почему он так работает.
А то я совсем чего-то не того думаю.
...
Рейтинг: 0 / 0
06.03.2013, 22:36:28
    #38176723
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSF, GlassFish 3.1.2.2 - как вручную удалить cookie JSESSIONID?
Возможно, тебя выручит реализация, на основании которой работает механизм RememberMe в Spring Security (дабы весь фреймворк не подтягивать). Суть в двух методах (вырезал как есть):
Код: 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.
protected void setCookie(String[] tokens, int maxAge, HttpServletRequest request, HttpServletResponse response) {
	StringBuilder sb = new StringBuilder();
	for (int i = 0; i < tokens.length; i++) {
		sb.append(tokens[i]);
		if (i < tokens.length - 1) sb.append(":");
	}
	String value = sb.toString();
	sb = new StringBuilder(new String(Base64.encode(value.getBytes())));
	while (sb.charAt(sb.length() - 1) == '=')
		sb.deleteCharAt(sb.length() - 1);
	Cookie cookie = new Cookie(SPRING_SECURITY_REMEMBER_ME_COOKIE_KEY, sb.toString());
	cookie.setMaxAge(maxAge);
	cookie.setPath("/");
	response.addCookie(cookie);
}
protected String makeTokenSignature(long tokenExpiryTime, String username, String type) {
	String data = username + ":" + tokenExpiryTime + ":" + type.toString() + ":" + getKey();
	MessageDigest digest;
	try {
		digest = MessageDigest.getInstance("MD5");
	} catch (NoSuchAlgorithmException e) {
		throw new IllegalStateException("No MD5 algorithm available!");
	}
	return new String(Hex.encode(digest.digest(data.getBytes())));
}


То есть самому ставить свою куку клиенту и даже после таймаута есть возможность поднять данные пользователя. Мысль, конечно, немного примитивная, так как не решает полностью вопрос защищенности и аутентикации, но направление может быть то.
(Класс org.springframework.security.web.authentication.RememberMeServices).
...
Рейтинг: 0 / 0
07.03.2013, 08:25:49
    #38176873
ferc
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSF, GlassFish 3.1.2.2 - как вручную удалить cookie JSESSIONID?
IDVsbruck, случайно не подскажите по Spring Security?

В принципе, похожая ситуация.
Есть приложение spring + vaadin в Spring Security сделана аутентификация basic.


Код: xml
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.
<security:global-method-security pre-post-annotations="enabled" />

<security:http use-expressions="true" auto-config="true">
        <security:http-basic />
        <security:custom-filter position="PRE_AUTH_FILTER" ref="j2eePreAuth"/>
        
    </security:http>

<bean id="j2eePreAuth" class="org.springframework.security.web.authentication.preauth.j2ee.J2eePreAuthenticatedProcessingFilter">
        <property name="authenticationManager" ref="authenticationManager"/>
        <property name="authenticationDetailsSource" ref="authenticationDetailsSource"/>
    </bean>
    <bean id="authenticationDetailsSource" class="org.springframework.security.web.authentication.preauth.j2ee.J2eeBasedPreAuthenticatedWebAuthenticationDetailsSource">
        <property name="mappableRolesRetriever" ref="webXmlMappableAttributesRetriever"/>
        <property name="userRoles2GrantedAuthoritiesMapper" ref="simpleAttributes2GrantedAuthoritiesMapper"/>
    </bean>
    <bean id="webXmlMappableAttributesRetriever"
          class="org.springframework.security.web.authentication.preauth.j2ee.WebXmlMappableAttributesRetriever"/>

    <bean id="simpleAttributes2GrantedAuthoritiesMapper"
          class="org.springframework.security.core.authority.mapping.SimpleAttributes2GrantedAuthoritiesMapper">
        <property name="attributePrefix" value=""/>
    </bean>

    <security:authentication-manager alias="authenticationManager">
        <security:authentication-provider ref='preAuthenticatedAuthenticationProvider'/>
    </security:authentication-manager>

    <bean id="preAuthenticatedAuthenticationProvider" class="org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationProvider">
        <property name="preAuthenticatedUserDetailsService" ref="preAuthenticatedUserDetailsService"/>
    </bean>
    <bean id="preAuthenticatedUserDetailsService"
          class="org.springframework.security.web.authentication.preauth.PreAuthenticatedGrantedAuthoritiesUserDetailsService"/>


Когда пользователь кликает по ссылке на это приложение появляется basic окно ввода логина пароля, входит.

по кнопке выхода из приложения(war spring+vaadin) пользователь попадает на страницу выбора приложений(мультивар приложение)

в вадине делаю

Код: java
1.
2.
3.
4.
5.
HttpSession session = ((WebApplicationContext)getMainWindow().getApplication().getContext()).getHttpSession();
session.invalidate();

setLogoutURL(getHome());
getMainWindow().getApplication().close();



Если опять войти по ссылке в приложение, то окно авторизации не появляется и пользователь входит под прежним логином.
Как сбросить в браузере basic аутентификацию если это вобще можно, чтобы пользователь не начинал новый сеанс?
...
Рейтинг: 0 / 0
06.08.2013, 12:19:39
    #38356366
victorL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSF, GlassFish 3.1.2.2 - как вручную удалить cookie JSESSIONID?
ferc,
Добрый день!
Возникла точно такая же проблема.
Как вы её решили?
...
Рейтинг: 0 / 0
06.08.2013, 13:45:25
    #38356551
ferc
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSF, GlassFish 3.1.2.2 - как вручную удалить cookie JSESSIONID?
victorL, можно решить путем перехода на form аутентификацию.
...
Рейтинг: 0 / 0
06.08.2013, 13:52:43
    #38356565
victorL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSF, GlassFish 3.1.2.2 - как вручную удалить cookie JSESSIONID?
ferc,
В том то и загвоздка, он переходит, а если набрать в адресной строке. адрес по которому только залогиненные пользователи ходят, он открывается. А должен на форму аутентификации поподать.
Делаю вот так:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
button.addClickListener(new Button.ClickListener() {
			public void buttonClick(ClickEvent event) {
				final String context = VaadinServlet.getCurrent()
						.getServletContext().getContextPath();				
				 getUI().getPage().setLocation(context + "/jsp/login");
				 getSession().close();			
			}
		});
...
Рейтинг: 0 / 0
06.08.2013, 14:05:57
    #38356599
victorL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSF, GlassFish 3.1.2.2 - как вручную удалить cookie JSESSIONID?
victorL,

Уже какой день борюсь с этим, весь инет облазил.
Может чем поможете
...
Рейтинг: 0 / 0
06.08.2013, 16:30:05
    #38356976
ferc
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSF, GlassFish 3.1.2.2 - как вручную удалить cookie JSESSIONID?
victorL,

за адресами смотрит спринг секьюрити

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
<bean id="filterChainProxy" class="org.springframework.security.web.FilterChainProxy">
        <sec:filter-chain-map path-type="ant">
            <sec:filter-chain pattern="/**" filters="sif,j2eePreAuthFilter,logoutFilter,etf,fsi"/>
        </sec:filter-chain-map>
    </bean>


 <bean id="fsi" class="org.springframework.security.web.access.intercept.FilterSecurityInterceptor">
        <property name="authenticationManager" ref="authenticationManager"/>
        <property name="accessDecisionManager" ref="httpRequestAccessDecisionManager"/>
        <property name="securityMetadataSource">
            <sec:filter-invocation-definition-source>
                <sec:intercept-url pattern="/secure/admin/**" access="ADMIN"/>
                <sec:intercept-url pattern="/secure/**" access="USER"/>
                <!--<sec:intercept-url pattern="/**" access="permitAll"/>-->
            </sec:filter-invocation-definition-source>
        </property>
    </bean>
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / JSF, GlassFish 3.1.2.2 - как вручную удалить cookie JSESSIONID? / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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