在web.xml安全约束中排除css和图像资源

Tim*_*Tim 6 security jsf web.xml facelets java-ee

我正在使用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>
Run Code Online (Sandbox Code Playgroud)

并有另一个允许访问页面和资源的子集:

<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>
Run Code Online (Sandbox Code Playgroud)

这很好用.但是,如下

<url-pattern>/javax.faces.resource/*</url-pattern>
Run Code Online (Sandbox Code Playgroud)

允许所有资源的正确方法?

我只是通过查看Facelets注入xhtml的url来做到这一点.这种方法有安全漏洞吗?

谢谢.

Bal*_*usC 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"
Run Code Online (Sandbox Code Playgroud)

所以,你对URL模式绝对正确.没有安全漏洞,前提是您不将敏感信息放在/resources由JSF资源处理程序处理的公共webcontent的文件夹中.