2014-10-22 2 views
1

У меня есть приложение, использующее внешнюю аутентификацию. Что-то вроде:Возврат на запрашиваемую страницу после внешней аутентификации

public class MyFilter extends GenericBeanFilter { 
... 

    doFilter (...) { 
     if (needAuth) { 
      String url = request.getRequestURL(); 
      // some code that saves this url to use after login 
      response.sendRedirect(); 
      return; 
     } 
    } 

Моя текущая проблема заключается в том, что после аутентификации пользователь возвращается к странице по умолчанию. Это потому, что первый запрошенный URL в этом классе всегда «{host} /index.html». Это, кажется, довольно обычная ситуация, но я не могу найти что-нибудь об этом.

То, что я думаю, что происходит, если я удаляю athentication: 1. Браузер позволяет назвать т.е. {хост}/страна/город 2. Что-то в Spring обрабатывает этот запрос и выполнить какую-редиректа, так: 3. Браузер делает вызов {хост} /index.html Browser делает звонки {хост}/*. JS ... 4. Angularjs делает вызов {хост}/страну/город

Так может быть, вопрос, который обрабатывает самый первый запрос весной?

Может быть все выше, потому что URL-адрес я использую caontains #: «localhost/#/groups» ... Даже с выключенным сервером хром первым вызовом вызывается только «localhost». (Для «localhost/groups» первый вызов - «localhost/groups»). Hmm ...

+0

Итак, ваш вопрос в том, какая часть пружины обрабатывает каждую первую голову запроса или как обрабатывать перенаправление, которое происходит из фильтра пружины в коде AngularJS? –

ответ

1

Когда вы говорите о перенаправлении на запрашиваемую страницу. Вы имеете в виду Угловой маршрут ?:

index.html/#/whatever 

Если это так, то я не думаю, что весна берет на фрагменты (материал после #). Вам необходимо вручную передать Угловой маршрут на ваш сервер, чтобы перенаправить пользователя после входа в систему.

+0

К сожалению, по неизвестной причине я не понял этого в первый раз, когда я его прочитал - ( –

1

Вам необходимо использовать в одном запросе информацию, которая существовала в предыдущем. Поскольку HTTP - это не подключенный протокол, он не доступен напрямую.

IMHO, вы должны использовать атрибут сеанса для хранения начального URL-адреса перед перенаправлением на страницу входа. Затем после успешной проверки подлинности вы можете перенаправить на сохраненный URL-адрес, доступный в сеансе, а затем удалить его из сеанса.

algorythme прост:

  • перед тем Перенаправление войти:
    • если запрашиваемая страница специальный (Логин, выход из системы), но проходит через фильтр не спасают его
    • если что-то, как уже было сохранено (атрибут существует и не пуст): оставьте его неизменным
    • еще сохранить запрошенный URL
  • после успешной аутентификации:
    • если атрибут сессии существует и не является пустым, перенаправлять к сохраненному URL
    • еще перенаправлять URL по умолчанию (/index.html)

Вы могли бы также используйте альтернативы, такие как передача сохраненного URL-адреса в параметре начального перенаправления или управление всеми на угловом уровне с помощью приложения Spring, которое не будет перенаправлять, но дает только не прошедший аутентификацию ответ. Но IMHO атрибут сеанса проще реализовать в вашей весенней заявке

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