В Struts 2 я вижу, как корневое пространство имен действует так же, как корневое пространство имен, то есть действует как «перехватить все».Мне нужно ограничить действия в моем приложении, чтобы они были доступны только с одного URL-адреса, включая действия без пространства имен в URL-адресе.Насколько я понимаю, использование корневого пространства имен должно сделать это, но я не видел, чтобы это работало.
Я могу воспроизвести эту проблему с примером HelloWorld из руководства по Struts 2 для Eclipse, доступным здесь .
Struts.xml содержит
<package name="basicstruts2" extends="struts-default">
...
<action name="index">
<result>/index.jsp</result>
</action>
...
</package>
Таким образом, обе следующие ссылки показывают результат index.jsp
- localhost: 8080 / Basic_Struts2_Ant / index.action
- localhost: 8080 / Basic_Struts2_Ant / foo / index.action
Пока хорошо.
Если я изменю struts.xml на
<package name="basicstruts2" namespace="/foo" extends="struts-default">
- localhost: 8080 / Basic_Struts2_Ant / index.action завершается с ошибкой «Нет сопоставленного действия для пространства имен / и индекса имени действия.»
- localhost: 8080 / Basic_Struts2_Ant / foo / index.action показывает index.jsp
Тоже хорошо.
Теперь, если я поменяю стояки xml на
<package name="basicstruts2" namespace="/" extends="struts-default">
Обе следующие ссылки показывают результат index.jsp (так же, как при отсутствии пространства именопределяется)
- localhost: 8080 / Basic_Struts2_Ant / index.action
- localhost: 8080 / Basic_Struts2_Ant / foo / index.action
Если я правильно понял документацию пространства имен, я бы ожидал, что localhost: 8080 / Basic_Struts2_Ant / foo / index.actionошибка «Нет сопоставленного действия для пространства имен / foo и индекса имени действия».
Я также пробовал другие варианты, заменив «foo» на «alksdja» и т. д., чтобы исключить возможность кэширования браузера.
Я неправильно понял, что делает корневое пространство имен?А как отключить /foo/index.action от работы при разрешении /index.action?