#java #spring #jakarta-ee #spring-security
#java #spring #джакарта-ee #spring-безопасность
Вопрос:
Я использую Spring Security 3.0.3 для проекта.
Этот проект состоит из 3 областей, которые должны быть доступны для разных людей
Поэтому я создаю следующую структуру — WEB-INF/ (для всех = незащищенный) — WEB-INF/app (для пользователей = ROLE_USER) — WEB-INF/app/admin.jsf (для администраторов = ROLE_ADMIN)
Этот admin.jsf находится в том же каталоге, который я, к сожалению, не могу изменить.
Моя информация о пользователе загружается из базы данных.
Они определяются как:
<bean id="preAuthenticatedProcessingFilterEntryPoint" class="org.springframework.security.web.authentication.Http403ForbiddenEntryPoint"/> <security:http entry-point-ref="preAuthenticatedProcessingFilterEntryPoint" >
<security:custom-filter position="PRE_AUTH_FILTER" ref="MyFilter"/>
<security:intercept-url pattern="/app/admin.jsf" access="ROLE_ADMIN" />
<security:intercept-url pattern="/app/**" access="ROLE_USER" />
<security:intercept-url pattern="/**" access="" />
</security:http>
Теперь все работает отлично. Загружаются пользовательские данные, роли устанавливаются в соответствии с базой данных, но, к сожалению,
- незащищенная область доступна для всех (все в порядке).
- администраторы могут видеть каждую страницу (поскольку они тоже являются ROLE_USER).
- пользователи ролей НЕ МОГУТ заходить на страницы в приложении
У кого-нибудь есть намек на то, что я сделал не так? Я тестирую его локально, и URL-адрес браузера выглядит так: http://localhost:8080/my_app/app/admin.jsf
До сих пор мне удавалось определить источник проблемы в том, что spring security игнорирует мои роли. Шаблоны URL-адресов перехвата работают, к сожалению, мои определенные роли этого не делают.
Я, наконец, смог определить проблему: коллега проверил второй конфигурационный файл, и я изменил неправильный. grml
Комментарии:
1. В чем ошибка, когда пользователь ROLE_USER пытается получить доступ к странице /app/abc.html ?
2. Запрашивается ли ваше представление администратора через:
http://<server>:<port>/<ApplicationName>/app/admin.jsf
?3. @thait84: ошибка http 403
4. @Ralph: да, именно так я это называю
Ответ №1:
Проблема в том, что шаблоны в конфигурации являются шаблонами URL, это НЕ расположение ваших файлов jsf или внутри приложения.
Итак, если вы не обращаетесь к этому jsf через: http://<server>:<port>/<ApplicationName>/app/admin.jsf
тогда вам просто нужно исправить шаблон URL на URL, который вы действительно используете.
Комментарии:
1. Я просто больше не понимаю. Я попытался настроить spring так, чтобы он разрешал доступ ко всем ресурсам для всех, тоже не сработало