Я использую управляемую приложением безопасность для веб-приложения Интранет.
В моем файле 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 вместо всегда панели инструментов.
Они оба кажутся чем-то вроде работы? У кого-нибудь есть идея получше?