Защищенные URL-адреса пропускают незащищенные компоненты веб-страницы неаутентифицированным пользователям

Я считаю, что реализация безопасности для приложения JSF через <login-config>+<security-constraint>+ <security-role> & через использование <filter> два разных способа! Они?

Я попытался реализовать безопасность с помощью первого метода выше (используя <login-config>+<security-constraint>+ <security-role>) но обнаружил, что моя защищенная веб-страница, которая использовала как защищенные, так и незащищенные компоненты HTML, была доставлена ​​с незащищенными ресурсами даже не прошедшим проверку пользователям.

Мне нужно полностью защитить URL-адреса, чтобы защищенные URL-адреса не передавали ни одной части этой веб-страницы неаутентифицированным пользователям. Как мне это сделать?

И, является ли реализация безопасности с помощью <filter> в web.xml самостоятельно управляемый способ борьбы с безопасностью? Я полагаю, что тогда вы сможете более детально настроить безопасность, поскольку вы фильтруете / перехватываете каждый запрос?

1 ответ

Решение

Это действительно два разных способа. <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>

Приведенный выше пример накладывает ограничение на все URL-адреса, соответствующие /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> фильтра.

Другие вопросы по тегам