Защищенные 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>
фильтра.