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

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

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

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

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

1 Ответ

7 голосов
/ 24 октября 2011

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

...