我正在使用JSF2.1和Glassfish 3.1.2。
我指定一个安全约束来阻止一切:
<security-constraint>
<web-resource-collection>
<web-resource-name>Secured Content</web-resource-name>
<!-- Block all -->
<url-pattern>/*</url-pattern>
</web-resource-collection>
<!-- only users with at least one of these roles are allowed to access the secured content -->
<auth-constraint>
<role-name>ADMINISTRATOR</role-name>
</auth-constraint>
</security-constraint>
并让另一个允许访问页面和资源的子集:
<security-constraint>
<web-resource-collection>
<web-resource-name>Open Content</web-resource-name>
<!-- Allow subscribe -->
<url-pattern>/subscribe/*</url-pattern>
<url-pattern>/javax.faces.resource/*</url-pattern>
</web-resource-collection>
<!-- No Auth Contraint! -->
</security-constraint>
这很好用。但是,以下是
<url-pattern>/javax.faces.resource/*</url-pattern>
允许所有资源的正确方法?
我只是通过查看Facelets注入xhtml的url来做到这一点。这种方法有安全漏洞吗?
感谢。
答案 0 :(得分:6)
必须是ResourceHandler#RESOURCE_IDENTIFIER
常数的值。另请参见其javadoc:
RESOURCE_IDENTIFIER
public static final java.lang.String RESOURCE_IDENTIFIER
Resource#getRequestPath
返回此常量的值作为URI的前缀。handleResourceRequest(javax.faces.context.FacesContext)
在请求URI中查找此常量的值,以确定请求是资源请求还是查看请求。另见:
public static final java.lang.String RESOURCE_IDENTIFIER "/javax.faces.resource"
所以,你对URL模式绝对正确。没有安全漏洞,前提是您没有将敏感信息放在由JSF资源处理程序处理的公共webcontent的/resources
文件夹中。