Как сохранить URL-адрес, отклоненный фильтром безопасности, чтобы перейти к нему после входа пользователя - PullRequest
2 голосов
/ 22 января 2009

Я использую управляемую приложением безопасность для веб-приложения Интранет.

В моем файле web.xml есть следующий фильтр:

<filter>
  <filter-name>employeeAccessFilter</filter-name>
  <filter-class>security.AuthorizationFilter</filter-class>
  <init-param>
      <param-name>roles</param-name>
      <param-value>employee</param-value>
  </init-param>
  <init-param>
      <param-name>onError</param-name>
      <param-value>../index.jsp</param-value>
   </init-param>
</filter>
<filter-mapping>
   <filter-name>employeeAccessFilter</filter-name>
   <url-pattern>/corporate/*</url-pattern>
</filter-mapping>

index.html содержит поле для входа. Когда пользователь входит в систему, он попадает на панель интрасети. Фильтр работает хорошо.

Взгляните на следующую ситуацию:

  • Кто-то получает электронное письмо со страницей внутренней сети, например: http://appname.com/corporate/page.do?id=6
  • Он щелкает ссылку, в браузере по умолчанию хранится файл cookie, он автоматически регистрируется и страница отображается правильно.

Но:

  • Кто-то получает электронное письмо со ссылкой на страницу в интрасети, например: http://appname.com/corporate/page.do?id=6
  • Он щелкает ссылку, в браузере по умолчанию нет файла cookie приложения, поэтому он не регистрируется автоматически. Он перенаправлен на экран входа в систему. Он входит в систему, но вместо панели, упомянутой в ссылке, идет на панель инструментов.

Есть ли простой способ решить эту проблему?

У меня есть две основные идеи:

* * В тысячу тридцать один) - Использовать Basic - безопасность, управляемая контейнером, которая решит проблему.

A) - Реализовать в фильтре аутентификации механизмы, которые сохраняют отклоненный URL-адрес как атрибут запроса. - Поместите отклоненный URL в качестве скрытого поля в поле для входа. - Измените логику входа в систему, чтобы использовать поле URL вместо всегда панели инструментов.

Они оба кажутся чем-то вроде работы? У кого-нибудь есть идея получше?

1 Ответ

1 голос
/ 22 января 2009

Большинство сайтов, которым требуются входы в систему, похоже, делают это с помощью метода A. Например, при переполнении стека, если вы заходите на страницу, требующую входа в систему, вы перенаправляетесь на /users/login?returnurl=..., что приводит к тому, что поле returnurl выводится как скрытое поле в форме входа.

...