受保护的URL将未受保护的网页组件泄露给未经身份验证的用户

时间:2011-10-24 07:05:18

标签: java security jsf container-managed

我相信通过<login-config> + <security-constraint> + <security-role>&amp;通过使用<filter>有两种不同的方式!是吗?

我尝试通过上面的第一种方法(使用<login-config> + <security-constraint> + <security-role>)实施安全性,但发现我的受保护网页同时使用了受保护的&amp;未受保护的HTML组件甚至向未经身份验证的用户提供了不受保护的资源。

我需要完全保护网址,以便受保护的网址甚至不会将该网页的任何部分泄露给未经身份验证的用户。我该怎么做?

并且,使用<filter>web.xml的安全实现是一种自我管理的方式来处理安全问题吗?我相信,然后您可以自定义安全性更细粒度,因为您正在过滤/捕获每个&amp;每一个请求?

1 个答案:

答案 0 :(得分:7)

这确实是两种截然不同的方式。 <security-constraint>是容器管理身份验证(CMS)的一部分。 Filter是本土身份验证的一部分。

要限制使用CMS访问某些资源,您只需设置其<url-pattern>

即可
<security-constraint>
    <web-resource-collection>
        <web-resource-name>Application</web-resource-name>
        <url-pattern>/app/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>someRoleName</role-name>
    </auth-constraint>
</security-constraint>

上述示例对所有与/app/*匹配的网址设置了约束,并允许仅使用someRoleName的用户访问。

要使用Filter限制对某些资源的访问权限,您还必须设置其<url-pattern>

<filter>
    <filter-name>authenticationFilter</filter-name>
    <filter-class>com.example.AuthenticationFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>authenticationFilter</filter-name>
    <url-pattern>/app/*</url-pattern>
</filter-mapping>

您只需在别处定义角色,可能是过滤器的<init-param>