Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / spring mvc. как передать headers при redirect из контроллера? / 25 сообщений из 37, страница 1 из 2
19.05.2012, 21:04:59
    #37802291
aliasnash
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
spring mvc. как передать headers при redirect из контроллера?
Привет всем!

Есть контроллер, который редиректит пользователя по определенному урлу:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
	@RequestMapping(value = "/goto", method = RequestMethod.GET)
	public String redirectToSite(ModelMap model, HttpServletRequest request, HttpServletResponse response)
	{
		String url = "http://www.site.ru";
		
		response.addHeader("transfer_header", "whata_is_it");
		
		return "redirect:" + url;
	}



Проблема в том, что после редиректа на сайт " http://www.site.ru", мой заголовок "transfer_header" теряется:(

Как можно реализовать передачу хедера корректно?
Спасибо!
...
Рейтинг: 0 / 0
20.05.2012, 00:13:10
    #37802457
ivanov-void
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
spring mvc. как передать headers при redirect из контроллера?
aliasnash,

Попробуйте добавлять заголовки в postHandle(...) интерцептора, расширяющего HandlerInterceptorAdapter.
...
Рейтинг: 0 / 0
20.05.2012, 00:22:49
    #37802463
aliasnash
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
spring mvc. как передать headers при redirect из контроллера?
ivanov-void, а возможно это делать без участия интерцепторов?
мне кажется все должно быть проще...хотя до меня не доходит как:(
...
Рейтинг: 0 / 0
20.05.2012, 01:17:58
    #37802496
ivanov-void
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
spring mvc. как передать headers при redirect из контроллера?
aliasnash,

Попробуйте тогда использовать forvard: При редиректе будет два запроса, поэтому установленные заголовки потеряются.
...
Рейтинг: 0 / 0
20.05.2012, 01:24:29
    #37802503
ivanov-void
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
spring mvc. как передать headers при redirect из контроллера?
for w ard:
...
Рейтинг: 0 / 0
20.05.2012, 01:43:17
    #37802511
aliasnash
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
spring mvc. как передать headers при redirect из контроллера?
ivanov-void,

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
	@RequestMapping(value = "/goto", method = RequestMethod.GET)
	public String redirectToSite(ModelMap model, HttpServletRequest request, HttpServletResponse response)
	{
		String url = "http://www.site.ru";
		
		response.addHeader("transfer_header", "whata_is_it");
		
		return "forward:" + url;
	}



не хочет работать. может что не правильно указываю?

ошибка 404 (The requested resource () is not available.)
возвращаю на redirect, норм отображается...
...
Рейтинг: 0 / 0
21.05.2012, 14:14:36
    #37803863
aliasnash
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
spring mvc. как передать headers при redirect из контроллера?
up
...
Рейтинг: 0 / 0
21.05.2012, 14:19:47
    #37803883
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
spring mvc. как передать headers при redirect из контроллера?
forward работает только для ресурсов в рамках того же контекста. Если это другой сайт, то только redirect. Если это какой-то кастомный хидер, то через redirect его передать не выйдет. Даже куку на другой домен скорее всего не выставить. Только get параметры. Соответсвенно site.ru должен их понимать.

В общем случае если бы можно было бы говорить браузеру клиента выставить любые заголовки для другого сайта, это было бы дырой в безопасности.
...
Рейтинг: 0 / 0
21.05.2012, 15:12:21
    #37804043
aliasnash
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
spring mvc. как передать headers при redirect из контроллера?
Blazkowicz,
ко мне заходит пользователь, со своими хедерами, стандартными (Referer и т.д.)
мне его надо перекинуть на сторонний сайт, например http://yandex.ru и при этом передать все его заголовки, с которыми он пришел ко мне, я сам руками (в коде) никаких хедеров генерить не буду. Мне лишь надо передать все хедеры пользователя на сайт, куда я его редирекчу.
Такое не реально? Это и есть кастомные хедеры? или вы имели ввиду под кастомными, это те которые я придумываю сам?
...
Рейтинг: 0 / 0
21.05.2012, 15:22:35
    #37804069
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
spring mvc. как передать headers при redirect из контроллера?
aliasnashко мне заходит пользователь, со своими хедерами, стандартными (Referer и т.д.)
мне его надо перекинуть на сторонний сайт, например http://yandex.ru и при этом передать все его заголовки, с которыми он пришел ко мне, я сам руками (в коде) никаких хедеров генерить не буду. Мне лишь надо передать все хедеры пользователя на сайт, куда я его редирекчу.
Такое не реально? Это и есть кастомные хедеры? или вы имели ввиду под кастомными, это те которые я придумываю сам?
Смотрите есть 3 варианта.
Redirect - это команда браузеру перейти на другой адрес. Хидеры так передать нельзя.
Forward это команда request-диспатчеру отдать некий ресурс с этого же сервера. Т.е. ни на какой другой сайт клиент не попадёт.
И третий вариант, это прокси. Надо из запроса пользователя сформировать новый, передать его на конечный сайт, получить отклик и отдать пользователю. Опять же пользователь не попадает на тот сайт напрямую. Он только получает его контент через вас.
...
Рейтинг: 0 / 0
21.05.2012, 15:38:49
    #37804128
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
spring mvc. как передать headers при redirect из контроллера?
Можно попробовать сформировать некий JavaScript, который отправит в браузере запрос с заголовками на целевой сайт, а потом, например, перегрузит страницу. Т.е. там уже по обстановке смотреть, что именно нужно. Но cross-domain JavaScript тоже штука скользкая. Заработает не везде.
...
Рейтинг: 0 / 0
21.05.2012, 15:46:07
    #37804151
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
spring mvc. как передать headers при redirect из контроллера?
Я не понял, о каких хидерах вы говорите.
Смотря какая цель.

Referer заполняется браузером чисто как информация откуда пришёл клиент.
Зачем его менять?
Это важная информация. По ней, часто судят откуда клиент пришёл. Счётчики работают.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
	// IP
		String fIP = request.getHeader("HTTP_X_FORWARDED_FOR"); // IP-адрес клиента
		String _clientIP;
		// при подключении через неанонимный прокси
		if (fIP != null) {
			_clientIP = "ПРОКСИ-" + fIP;
		} else {
			_clientIP = request.getRemoteAddr();
		}
		// IP
		//////////////////////////////////////////////////////
                Referer

        	String _referer = request.getParameter("_referrer");
...
Рейтинг: 0 / 0
21.05.2012, 15:57:51
    #37804192
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
spring mvc. как передать headers при redirect из контроллера?
упс. Второй параметр Ref это мнимый (исправленнй на JS) referrer.
Код: javascript
1.
&_referrer=" + encodeURIComponent(document.referrer));


Когда юзверь бродит внутри домена по твоим страницам document.referrer уже очищается. Мне он нужен был.
...
Рейтинг: 0 / 0
21.05.2012, 16:58:01
    #37804375
aliasnash
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
spring mvc. как передать headers при redirect из контроллера?
Petro123,
Referer я просто для примера привел.
Мне эти данные не требуется изменять, мне их нужно просто перенаправить на требуемый сайт.
Т.е. все хедеры, которые присутствуют в request'е пользователя, мне нужно передать на сайт, куда я его редирекчу.
Менять, или добавлять хедер мне не требуется

Blazkowicz,
Кажется что js это единственный вариант.

спасиб
...
Рейтинг: 0 / 0
22.05.2012, 11:46:34
    #37805433
aliasnash
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
spring mvc. как передать headers при redirect из контроллера?
BlazkowiczМожно попробовать сформировать некий JavaScript, который отправит в браузере запрос с заголовками на целевой сайт, а потом, например, перегрузит страницу. Т.е. там уже по обстановке смотреть, что именно нужно. Но cross-domain JavaScript тоже штука скользкая. Заработает не везде.

Blazkowicz, Вы можете помочь с таким скриптом? я просто даже пока не представляю как это сделать, или как сформировать правильно вопрос.
Что мне требуется? у меня есть сайт http://site.ru, и по запросу от пользователя, я делаю редирект этого пользователя на сайт http://site.ru, при этом все headers, с которыми пришел ко мне пользователь, нужно перенаправить также на этот сайт. Если я делаю просто "redirect:", то все headers заменяются моими, с портала, что не правильно для меня.
...
Рейтинг: 0 / 0
22.05.2012, 14:38:06
    #37805986
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
spring mvc. как передать headers при redirect из контроллера?
aliasnash,

Ты упорно молчишь Зачем?
Имхо это Хак.
Удачи.
...
Рейтинг: 0 / 0
22.05.2012, 14:48:20
    #37806027
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
spring mvc. как передать headers при redirect из контроллера?
aliasnashBlazkowicz, Вы можете помочь с таким скриптом?

Не думаю. Там нет однозначного решения. Надо смотреть на целевой сайт.

aliasnashя просто даже пока не представляю как это сделать, или как сформировать правильно вопрос.
Что мне требуется? у меня есть сайт http://site.ru, и по запросу от пользователя, я делаю редирект этого пользователя на сайт http://site.ru, при этом все headers, с которыми пришел ко мне пользователь, нужно перенаправить также на этот сайт. Если я делаю просто "redirect:", то все headers заменяются моими, с портала, что не правильно для меня.
Да, мы поняли. Только это всё попахивает. Вы хотите заставить перейти браузер на некую страницу, но при этом заставить, например, ту страницу думать, что клиент пришел не от вас, а откуда-то ещё?
...
Рейтинг: 0 / 0
22.05.2012, 18:27:40
    #37806502
aliasnash
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
spring mvc. как передать headers при redirect из контроллера?
Petro123aliasnash,

Ты упорно молчишь Зачем?
Имхо это Хак.
Удачи.

Молчу о чем? не совсем понял вопрос




BlazkowiczДа, мы поняли. Только это всё попахивает. Вы хотите заставить перейти браузер на некую страницу, но при этом заставить, например, ту страницу думать, что клиент пришел не от вас, а откуда-то ещё? .


верно, конечный сайт должен не знать, что пользователь прошелся через меня.
...
Рейтинг: 0 / 0
22.05.2012, 18:46:20
    #37806537
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
spring mvc. как передать headers при redirect из контроллера?
aliasnashверно, конечный сайт должен не знать, что пользователь прошелся через меня.Прокси-сервер не пробовали настраивать?
Или что?
...
Рейтинг: 0 / 0
23.05.2012, 10:22:12
    #37807208
aliasnash
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
spring mvc. как передать headers при redirect из контроллера?
Basil A. Sidorovaliasnashверно, конечный сайт должен не знать, что пользователь прошелся через меня.Прокси-сервер не пробовали настраивать?
Или что?

прокси не вариант, нужно чтобы в итоге пользователь работал напрямую с конечным сайтом, а не через проксю

или всетаки это можно через проксю замутить? стоит еще nginx...
...
Рейтинг: 0 / 0
23.05.2012, 10:25:51
    #37807223
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
spring mvc. как передать headers при redirect из контроллера?
aliasnashпрокси не вариант, нужно чтобы в итоге пользователь работал напрямую с конечным сайтом, а не через проксю
или всетаки это можно через проксю замутить? стоит еще nginx...
То что вы хотите принципиально не возможно на HTTP. Т.к. forward не вариант в вашем случае, то варианта остаётся только два, как я и описал выше.
JavaScript, который отправляет запрос на целевой сервер с нужными заголовками, а потом подменяет контент страницы.
Прокси, который полностью качает весь трафик межнду целевым сайтом и клиентом.
И там и там есть свои сложности и не всякий сервер разрешит такие хаки.
...
Рейтинг: 0 / 0
23.05.2012, 11:16:17
    #37807365
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
spring mvc. как передать headers при redirect из контроллера?
Аффтар! Удивительно но ты неделю пишешь Что делать и ни разу Зачем делать. Кто у тебя Постановщик?
...
Рейтинг: 0 / 0
23.05.2012, 11:19:49
    #37807370
aliasnash
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
spring mvc. как передать headers при redirect из контроллера?
Blazkowiczaliasnashпрокси не вариант, нужно чтобы в итоге пользователь работал напрямую с конечным сайтом, а не через проксю
или всетаки это можно через проксю замутить? стоит еще nginx...
То что вы хотите принципиально не возможно на HTTP. Т.к. forward не вариант в вашем случае, то варианта остаётся только два, как я и описал выше.
JavaScript, который отправляет запрос на целевой сервер с нужными заголовками, а потом подменяет контент страницы.
Прокси, который полностью качает весь трафик межнду целевым сайтом и клиентом.
И там и там есть свои сложности и не всякий сервер разрешит такие хаки.




1. client -> request+headers -> server script
2. server script -> response (location=myurl + headers from client) -> client
3. client (JS в фоне устанавливаю все headers) -> request (from location header) -> myurl

для пользователя это один шаг


вот так будет работать, так правильно? (возможно я плохо понимаю всю сложность)
...
Рейтинг: 0 / 0
23.05.2012, 11:35:17
    #37807400
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
spring mvc. как передать headers при redirect из контроллера?
aliasnash1. client -> request+headers -> server script
2. server script -> response (location=myurl + headers from client) -> client
3. client (JS в фоне устанавливаю все headers) -> request (from location header) -> myurl

Шаг 2 не верный. location=myurl отправит клиента на целевой сервер без ваших хидеров.
Надо отправить запрос с хидерами. Считать HTML и попробовать обновить контент сраницы через DOM. Тогда юзер будет видеть данные целевого сервера, но с вашим адресом. А потом уже перекинуть юзера на целевой сервер полностью.
Это сработает не всегда и не везде.
...
Рейтинг: 0 / 0
23.05.2012, 11:44:55
    #37807429
aliasnash
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
spring mvc. как передать headers при redirect из контроллера?
Blazkowiczaliasnash1. client -> request+headers -> server script
2. server script -> response (location=myurl + headers from client) -> client
3. client (JS в фоне устанавливаю все headers) -> request (from location header) -> myurl

Шаг 2 не верный. location=myurl отправит клиента на целевой сервер без ваших хидеров.
Надо отправить запрос с хидерами. Считать HTML и попробовать обновить контент сраницы через DOM. Тогда юзер будет видеть данные целевого сервера, но с вашим адресом. А потом уже перекинуть юзера на целевой сервер полностью.
Это сработает не всегда и не везде.

а вот так??

1. client -> request+headers -> server script
2. server script -> response (temp_page.jsp?query_string=myurl + headers from client) -> client
3. client (JS в фоне устанавливаю все headers) -> request (from query_string) -> myurl

т.е. во 2 шаге, я перенаправляю на страничку temp_page.jsp, на которой JSом я копирую все хедеры нужные, и отправляю пользователя на myurl из query_string
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / spring mvc. как передать headers при redirect из контроллера? / 25 сообщений из 37, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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