2014-11-21 3 views
8

Я использую механизм входа пружины безопасности для моего приложения и испытанные everything.Things работали fine.I имеют следующий случай использования404 с response.sendRedirect

  1. Если клиент не вошел в систему, приложение будет перенаправлять клиента на страницу входа.
  2. После успешного входа в систему, приложение перенаправляет клиента обратно на ту же страницу, откуда они были перенаправлены на страницу входа

это код Java используется для перенаправления пользователя на его исходное местоположение

final SavedRequest savedRequest = this.requestCache.getRequest(request, response); 
targetUrl = savedRequest.getRedirectUrl(); 
getRedirectStrategy().sendRedirect(request, response, targetUrl); 

RedirectionStrategy используется здесь DefaultRedirectStrategy, все работает нормально. Приложение теперь развернуто на сервере Pre Production, и теперь это кажется неработоспособным, и я получаю ошибку 404.

Когда клиент перенаправляется на главную страницу, targetUrl выходит как «/», у меня есть контроллер Spring с именем, это отображение

@RequestMapping("/") 
public class HomePageController{ // home page code } 

тока Pre-Prod Урс моего приложения является prepd-www.mysite.com так, когда sendredirect приходят к действию, URL-адрес страницы изменяется на prepd-www.mysite.com/prepd-www.mysite.com

Я не уверен, что вызывает эту проблему. это из-за настроек прокси-сервера? Может ли кто-нибудь предложить мне о возможной первопричине этой проблемы?

Я уже пробовал это на всех локальных машинах и хорошо на нашем QA, но все работает отлично.

Текущая настройка для среды, в которой это происходит,

  1. У нас есть 4 приложения сервера
  2. У нас есть один балансировщик нагрузки, который перенаправляет трафик на одного сервера приложений.
+1

Вы используете какой-либо http-сервер (например, apache) на своем предварительно подготовленном сервере? Если вы говорите, что локально он работает нормально, то, вероятно, это проблема с настройкой. –

+0

@AleksandrM: Да, используя Apache в качестве HTTP-сервера, даже я сомневаюсь, что это проблема с конфигурацией. –

+0

Это похоже на неправильную конфигурацию обратного прокси-сервера apache. Не могли бы вы показать конфигурацию прокси? –

ответ

1

Вы используете в подготовке производства или другого кота сервера приложений ?, нормально, если ваша война звонит Foo и ваши обязательства по коту, путь к этой войне

http://localhost:8080/foo/ 

Так что, если вы используете сервлет вам нужно указать в вашем web.xml, что основным путем является foo/*

1

Просто дикое предположение, поскольку вы не могли дать конфигурацию обратного прокси-сервера, а также точный URL-адрес, используемый в pre prod и в разработке.

Вы говорите, что используете функцию DefaultRedirectStrategy с весны безопасности. Эта стратегия имеет опцию (contextRelative), которая добавляет путь ServletContext к URL-адресу. Если в вашей системе разработки вы использовали корневой контекст, то есть, если вы обращались к домашней странице (например): http://localhost:8080/ контекст serlet был пуст.

Но если сейчас в preprod, контекст сервлета уже не корень, но говорят /myAppраз переводится апача обратного прокси, когда вы поменяете вы получите URL из /myApp/myApp, которые могут быть переведены обратно на то, что вы дали.

Вы могли бы попытаться контролировать, есть ли у вас contextRelative, как true в DefaultRedirectStrategy, и если да, если вы можете установить, если ложно, а также контролировать, если вы поменяете в абсолютных или относительных URL-адресов.

+0

Спасибо! это то, что я сделал как дикое предположение, надеюсь, что это сработает. Моя проблема заключается в том, что серверы не находятся под нашим контролем, и они для нас похожи на черный ящик, и любой информационный запрос кажется потерянным для ИТ-команды :( –

+0

@UmeshAwasthi: просто совет, но вы должны использовать не нулевой контекст в развитии для определения более ранних таких проблем. –

+0

Я пробовал этот, но, похоже, он не работает, для меня «контекст» всегда приходит как «пустым», а URL всегда приходит как «http: //site-la-www.mysite. com/' –

1

Если вы используете apache перед проверкой правила перезаписи и переадресации правил конфигурации apache. Лучшим способом было бы ssh туннель непосредственно на сервер приложений (путем пропуска apache) и тестирования. Если это работает, это означает, что ваша конфигурация приложения в порядке, и ее нужно исправлять в apache.

+0

Извините, если вы спросите об этом, но не знакомы с настройками, как я могу обойти apache с помощью ssh? –

+0

Если у вас есть доступ к порту tomcat, tou может использовать шпатлевку для туннеля в порт tomcat и напрямую обращаться без apacche на вашем локальном компьютере. Проверьте это для туннелирования шпатлевки. http://www.ehow.com/how_2036605_create-ssh-putty.html#page=7 –