Вызовы действий Struts2 / Struts1

я работаю над приложением, которое использует Struts2 и Struts1. Теперь я хочу реализовать аутентификацию для разных действий. Я хотел бы использовать interceptor, чтобы проверить, к какому namespace принадлежит action. Я обернул все действия Struts1 действием Struts2. Таким образом, все действия strut1 выполняются через перехватчик.

<action name="contactsList" class="com.opensymphony.xwork2.ActionSupport">
    <result name="success">contactsList.do</result>
</action>

Проблема в том, что если пользователь введет действие struts1 в браузере, перехватчик не будет вызван.

Мой вопрос: есть ли разница между вызовами действий, поступающими из браузера, и вызовами действий, вызываемыми через конфигурацию Struts. Если это возможно, можно ли запретить действия Struts1 из браузера, но разрешено внутри struts?


person IonTichy    schedule 11.04.2013    source источник
comment
Отключить struts1 и использовать только диспетчер struts2?   -  person Boris the Spider    schedule 11.04.2013
comment
Вы имеете в виду отображение сервлетов? ‹servlet-mapping› ‹servlet-name›action‹/servlet-name› ‹url-pattern›*.do‹/url-pattern› ‹/servlet-mapping›   -  person IonTichy    schedule 11.04.2013
comment
Да и сам сервлет. Тогда пользователи смогут получать доступ к содержимому только через диспетчер struts2.   -  person Boris the Spider    schedule 11.04.2013
comment
Нет, это не работает, потому что тогда не будет вызываться действие struts1. Я хочу, чтобы перенаправление с struts2 .action на struts1 .do работало, но не должно работать с введенного URL-адреса.   -  person IonTichy    schedule 11.04.2013


Ответы (1)


Вы думали в неправильном направлении. В Struts2 есть плагин Struts1, который фактически оборачивает действие Struts1. Итак, код будет выглядеть так

<action name="contactsList" class="org.apache.struts2.s1.Struts1Action">
  <param name="className">com.mycompany.myapp.ContactsListAction</param>
  <result>contactsList.jsp</result>
</action>

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

person Roman C    schedule 11.04.2013
comment
В документации говорится, что плагин Struts 1 в настоящее время предназначен только для того, чтобы вы могли запускать действия Strust 1 внутри приложения Struts 2. Это НЕ позволяет вам продолжать использовать библиотеки тегов Struts 1 в ваших JSP. Ваши JSP должны быть преобразованы для использования библиотеки тегов Struts 2. Я не могу изменить ни действие struts1, ни jsps. Я должен использовать их такими, какие они есть. - person IonTichy; 11.04.2013
comment
Правильно, это путь к миграции. Вы либо делаете это, либо используете оба фреймворка вместе, но не так, как вы это делали. - person Roman C; 11.04.2013