在我的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>添加到第二个安全约束中,但没有结果。
发布于 2011-03-05 10:19:06
如果可以,请将FacesServlet映射到后缀模式上。当您还在使用JSF1.x时,将其映射到*.jsf上。然后,您就可以使用该安全约束来阻止对*.xhtml的访问。当您已经使用JSF2.0(您的问题历史记录证实了这一点)时,只需将其映射到*.xhtml即可。与在JSF1.x中相反,FacesServlet不会在无限循环中运行。通过这种方式,您根本不需要任何安全约束。惟一的缺点是,如果不涉及FacesServlet,您将无法提供“普通”的XHTML文件。但是这样做没有任何意义,这样的文件无论如何都必须作为*.html提供。
PS:感谢您提供了/faces/*前缀模式糟糕的另一个原因;)
发布于 2012-05-22 22:51:34
它工作得很好,但它不显示欢迎文件,因为甚至根路径都被阻止了。我尝试添加/添加到第二个安全约束,但没有结果。
在这种情况下,它应该是有效的。我在我的机器上测试过了,第一次就不工作了。直到,我们重新启动应用程序服务器。那么它的行为就像预期的那样。
https://stackoverflow.com/questions/5112062
复制相似问题