在我的 web.xml 我使用这样的东西:
<security-constraint>
<web-resource-collection>
<web-resource-name>Block all</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<auth-constraint />
</security-constraint>
<security-constraint>
<web-resource-collection>
<web-resource-name>Allow facelets</web-resource-name>
<url-pattern>/faces/*</url-pattern>
<http-method>POST</http-method>
<http-method>GET</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>*</role-name>
</auth-constraint>
</security-constraint>
除了以/faces/开头的请求外,所有传入请求都被阻止。
我这样做是因为,否则,未经授权的用户可以访问 facelets 源文件。
它工作正常,但它不显示欢迎文件,因为即使是根路径也被阻止了。
我尝试添加
<url-pattern>/</url-pattern>
到第二个安全约束,但没有。
最佳答案
如果可以,请映射 FacesServlet
在后缀模式上。如果您仍在使用 JSF 1.x,请将其映射到 *.jsf
.然后你可以阻止访问 *.xhtml
具有该安全约束。如果您已经使用 JSF 2.0(您的问题历史证实了这一点),只需将其映射到 *.xhtml
.与 JSF 1.x 中的相反,FacesServlet
不会在无限循环中运行。这样你根本不需要任何安全约束。唯一的缺点是您将无法在不涉及 FacesServlet
的情况下提供“普通的”XHTML 文件。 .但无论如何这样做没有任何意义,这样的文件必须作为 *.html
提供。反正。
PS:谢谢你提供/faces/*
的另一个原因前缀模式很烂;)
关于安全约束和欢迎文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5112062/