【发布时间】:2012-01-16 15:06:31
【问题描述】:
在 Struts 2 中,我看到根名称空间的行为与根名称空间相同,即充当“包罗万象”的角色。我需要限制我的应用程序中的操作只能从一个 URL 访问,包括那些在 URL 中没有命名空间的操作。我的理解是使用根命名空间应该这样做,但我还没有看到它工作。
我可以使用 Struts 2 教程的 Eclipse 的 HelloWorld 示例来重现这个问题here。
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
也不错。
现在如果我把struts 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”等,以消除浏览器缓存的可能性。
我是否误解了根命名空间的作用?以及如何在允许 /index.action 的同时禁用 /foo/index.action?
【问题讨论】:
-
查看我对this question 的回答,看看它是否适合您。
-
是的,这行得通。谢谢!
-
现在我正在阅读所有设置,似乎 struts.mapper.alwaysSelectFullNamespace 或 struts.enable.SlashesInActionNames 会根据您希望 URL 中间的额外内容来修复它相关联。
标签: namespaces struts2