在我的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>
添加到第二个安全约束但没有。
答案 0 :(得分:1)
如果可以,请在后缀模式上映射FacesServlet
。如果您仍然使用JSF 1.x,请将其映射到*.jsf
。然后,您可以使用该安全约束阻止*.xhtml
上的访问。当您已经使用JSF 2.0时(您的问题历史证实了这一点),只需将其映射到*.xhtml
即可。与JSF 1.x相反,FacesServlet
不会在无限循环中运行。这样您根本不需要任何安全约束。唯一的问题是,如果不涉及FacesServlet
,您将无法提供“普通的”XHTML文件。但是这样做无论如何都没有任何意义,无论如何这样的文件必须作为*.html
提供。
PS:感谢您提供/faces/*
前缀模式糟糕的另一个原因;)
答案 1 :(得分:0)
它工作正常,但它不显示欢迎文件,因为即使是root 路径被阻止。我试图添加/秒 安全约束,但没有。
在这种情况下,它应该有效。我在我的机器上测试过它,它第一次不起作用。直到,我们重启应用服务器。然后它表现得像预期的那样。