6

我正在使用 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 来做到这一点的。这种方法是否存在安全漏洞?

谢谢。

4

1 回答 1

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 模式是绝对正确的。没有安全漏洞,前提是您没有将敏感信息放在/resources由 JSF 资源处理程序处理的公共 Web 内容的文件夹中。

于 2012-12-04T11:02:40.033 回答