2011-01-28 1 views
3

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

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

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

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

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

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

ответ

2

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

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

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

+0

Да, я думаю, что это будет как можно ближе, спасибо. –

0

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

+0

Спасибо за ваш ответ. Несомненно, это не дает мне необходимой информации. Ключ карты соответствует шаблону url, поместите значение карты в цепочку фильтров (BasicAuthenticationFilter, securityContextHolderAwareRequestFilter, ......, FilterSecurityInterceptor). Мне кажется, что я должен разобрать контекст xml вручную, чтобы добиться того, чего хочу. –