Предполагается, что вы используете Spring Security 3, источником этой информации (какие атрибуты / роли настроены для определенного пути) является FilterInvocationSecurityMetadataSource, который вводится в FilterSecurityInterceptor. Поэтому, если у вас есть конкретный URL, вы можете запросить настроенные атрибуты, передав FilterInvocation (созданный из запроса и ответа) методу getAttributes () FilterInvocationSecurityMetadataSource.
Получить ссылку на внутренние компоненты, созданные пространством имен, может быть немного сложно. Предполагая, что у вас есть свой собственный компонент (или компоненты), из которого вы хотите сделать вызов, вы можете внедрить его в них, добавив BeanPostProcessor в контекст вашего приложения, который реализован примерно так:
public class FilterSecurityMDSExtractor implements BeanPostProcessor, BeanFactoryAware {
private ConfigurableListableBeanFactory bf;
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
if (bean instanceof FilterInvocationSecurityMetadataSource) {
// Get your own bean from the BeanFactory here and inject the SecurityMetadataSource into it
}
return bean;
}
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
return bean;
}
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
this.bf = (ConfigurableListableBeanFactory)beanFactory;
}
}
Обратите внимание, что Spring Security автоматически регистрирует WebInvocationPrivilegeEvaluator в контексте, который можно использовать для проверки того, имеет ли пользователь возможность вызывать определенный URL-адрес без его фактического вызова. Это похоже на то, что он запрашивает SecurityMetadataSource, но не совсем то, что вам нужно.