Перехватчик Spring Security-URL не работает

#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 так, чтобы он разрешал доступ ко всем ресурсам для всех, тоже не сработало