Плагин Struts 2 Convention и файлы JSP в WEB-INF

При использовании подключаемого модуля соглашения Struts2 этот подключаемый модуль автоматически перенаправляет запрос hello-world.action на /WEB-INF/content/hello-world.jsp, даже если HelloWorld.java не определен.

См. http://struts.apache.org/release/2.1.x/docs/convention-plugin.html для этого.

С другой стороны, мы помещаем файлы JSP в WEB-INF, чтобы избежать прямого доступа к файлам JSP.

Я думаю, что такое поведение плагина соглашения разрушает политику доступа JSP. Любой может получить прямой доступ к JSP, просто вызвав действие сборки на лету.

Я прав?! Если да, можем ли мы отключить эту функцию?


person Alireza Fattahi    schedule 27.12.2013    source источник


Ответы (1)


Нет, вы не совсем правы. Страницы не имеют прямого доступа, если они находятся под WEB-INF. Плагин соглашения создает дополнительную конфигурацию на основе XML из классов Action по соглашению. Таким образом, у вас есть доступ только к результатам, возвращаемым этими действиями. Плагин соглашения помещает свою конфигурацию в пакет XWork, как описано в документации и этом ответе. Итак, разрешение конфликтов, что возможно, если вы не укажете родительский пакет. Вы также можете использовать условные аннотации для настройки сгенерированной конфигурации. Плагин соглашения по умолчанию сканирует классы в базовом пакете, которые могут быть struts или actions, которые настраиваются и имеют суффикс Action. Это все настройки по умолчанию для плагина соглашения. Если вы хотите изменить настройки по умолчанию, вы можете использовать постоянный тег в struts.xml или соответствующие свойства в struts.properties.

Однако в документации не ясно, как это обрабатывается.

недействующие результаты, которые идентифицируются по URL-адресу

Кроме того, неясно, какой URL-адрес используется для его идентификации. Я думаю, вы уже знакомы с конфигурацией без действия, когда вы можете вернуть результат SUCCESS без выполнения действия, потому что класс действия используется по умолчанию. Но проблема даже не в этом. Плагин соглашения вместе с конфигурацией, которую он создает, упомянутой выше, также помещает неизвестный обработчик, который должен обрабатывать URL-адреса, для которых конфигурация не существует (т.е. не создана соглашением). Это источник проблемы. Плагин также не позволяет заменить/переопределить конфигурацию. К счастью, есть неизвестный менеджер-обработчик (который при необходимости можно заменить), который обрабатывает неизвестные действия через итерацию "unknown-handler-stack", которым управляет этот менеджер. С помощью стека обработчиков вы можете настроить порядок повторения неизвестных обработчиков. Обратите внимание, что цикл заканчивается, когда обработчик возвращает конфигурацию действия. Это означает, что если вы создадите свой собственный неизвестный обработчик и установите порядок в стеке, то обработчик соглашения можно будет обойти.
.

person Roman C    schedule 27.12.2013
comment
Я просмотрел ваш ответ и ссылку, к сожалению, я не получил свой ответ. Согласно образцу hello-world.jsp является результатом действия, но это все еще jsp, к которому можно получить доступ. Позвольте мне спросить таким образом, можно ли настроить плагин соглашения, чтобы он не отображал hello-world.jsp (даже если это правильный результат) при вызове hello-world.action ! Спасибо. - person Alireza Fattahi; 28.12.2013
comment
Действие hello-world возвращает результат, настроенный конфигуратором на основе пакета. Итак, в execute можно вернуть любой результат. Смотрите обновленный ответ. - person Roman C; 28.12.2013
comment
Здравствуйте и извините за возобновление этого вопроса, но я борюсь с той же проблемой, что и OP, и я не могу понять, как отключить этот actionless results из плагина соглашения Struts2 или справиться с ними, чтобы предотвратить прямой доступ к моим JSP файлам. @RomanC Я знаю, что вы все еще активны здесь, в stackoverflow, поэтому, пожалуйста, не могли бы вы лучше объяснить свой ответ? Я создал здесь вопрос по этому же вопросу: stackoverflow.com/questions/29185042/ . заранее спасибо - person JorgeGRC; 22.03.2015