【发布时间】:2012-08-15 16:06:47
【问题描述】:
我在Tomcat中使用Struts2+Spring+Hibernate。
我遇到了用户无法直接输入 .jsp 或 .action url 的问题。他们需要访问的所有内容都可以从主页访问,所以我想阻止这种访问。
我一直在寻找答案,并找到了一些东西,尤其是与 .jsp 阻塞有关的东西。我已经添加了
<security-constraint>
<web-resource-collection>
<web-resource-name>Deny Direct Access</web-resource-name>
<description></description>
<url-pattern>*.jsp</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>Denied</role-name>
</auth-constraint>
</security-constraint>
<security-role>
<role-name>Denied</role-name>
</security-role>
到我的 web.xml,但这似乎没有任何作用。然后我变了
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*</url-pattern>
</filter-mapping>
到
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.action</url-pattern>
<url-pattern>*.html</url-pattern>
<url-pattern>/index.jsp</url-pattern>
</filter-mapping>
这会阻止一些 .jsp 文件,但不会阻止其他文件。我确定不放
<url-pattern>*.jsp</url-pattern>
担任我的任何安全角色。
我听说我可以将所有 jsps 放在 /Web-inf 中,但这似乎很麻烦,因为我必须在我引用它们的每个应用程序实例中更改路径。
我也找不到任何涉及阻止直接访问 .action 类的内容。如果有人可以指点我找到此信息,将不胜感激。谢谢。
【问题讨论】:
-
为什么在配置文件之外的任何地方直接引用 JSP 页面?
-
我没有,它们只用在 .xml 文件中
-
那么我看不出有什么大不了的——使用正则表达式在 JSP 文件名前加上
/WEB-INF/。 -
是的,这是最快的解决方案。谢谢。