Как программно получить доступ к <INTERCEPT-URL> из элемента <HTTP>в Spring Security - PullRequest
3 голосов
/ 28 января 2011

Как программно получить доступ к содержимому объявлений intercept-url (из схемы http://www.springframework.org/schema/security)?Например,

<http auto-config='true'>
    <intercept-url pattern="/static/**" filters="none" access="IS_AUTHENTICATED_ANONYMOUSLY" />
    <intercept-url pattern="/**" access="ROLE_USER" />
    ...
</http>

Сопоставление ролей безопасности Spring используется для ограничения доступа к определенным страницам.Я хочу извлечь ту же информацию отображения ролей (шаблоны и accept ), чтобы можно было отображать только те страницы в html-меню, к которым каждая роль имеет доступ.

Я посмотрел на HttpConfigurationBuilder, но он защищен и не предлагает столько информации.Я также попытался:

  FilterSecurityInterceptor interceptor = appContext.getBean(FilterSecurityInterceptor.class);
  if (interceptor != null) {
      for (ConfigAttribute attr : interceptor.getSecurityMetadataSource().getAllConfigAttributes()) {
          // Extract the attributes ... 
          attr.getAttribute();
      }
  }

, но мне удалось получить доступ только к ролям, а не к шаблонам URL.

Ответы [ 2 ]

2 голосов
/ 23 февраля 2011

Конфигурация, объявленная с использованием поддержки пространства имен, не существует в том же «формате» после загрузки контекста приложения.

Если вы хотите сохранить информацию о сопоставлении ролей, вам нужно получить к ней доступ при разборе конфигурации - и сохранить данные, необходимые для будущего использования. Вы можете сделать это, создав подклассы org.springframework.security.config.http.HttpSecurityBeanDefinitionParser, прочитав нужные данные и делегировав super.

См. Spring Security 3 - Приложение D. Расширяемое создание XML для использования пользовательских BeanDefinitionParser реализаций.

0 голосов
/ 28 января 2011

Возможно, вы можете проверить, дает ли метод getFilterChainMap () класса FilterChainProxy соответствующую информацию.

...