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

Raj*_*pta 2 java security jsf container-managed

我相信通过<login-config>+ <security-constraint>+ <security-role>和通过使用实现JSF应用程序的安全性<filter>是两种不同的方式!是吗?

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

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

而且,使用安全实施<filter>web.xml一种自我管理的方式来处理安全性?我相信,然后您可以在筛选/捕获每个请求时自定义更细粒度的安全性?

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

上面的示例将约束放在所有匹配的URL上,/app/*并允许someRoleName仅对用户进行访问.

要使用a限制对某些资源的访问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>
Run Code Online (Sandbox Code Playgroud)

您只需在其他位置定义角色,可能作为<init-param>过滤器的一部分.