Как я могу определить, какие роли требуются, чтобы получать доступ к URL с безопасностью Spring?

Вы можете использовать TextBlock с Runs. Вот пример:

var text = new TextBlock();
text.Inlines.Add(new Bold(new Run("Bold:")));
text.Inlines.Add(new Run(" nonbold"));
label2.Content = text;
5
задан Dani 21 March 2013 в 13:48
поделиться

2 ответа

Не забывайте, что то, что на самом деле происходит при решении, предоставить ли доступ, - то, что URL и существующая аутентификация передаются через серию AccessDecisionVoters, одно из значения по умолчанию, которого RoleVoter. Этот избиратель проверяет конфигурацию на требуемый ресурс, и если определенная роль будет требоваться, то отклонит просьбу, если существующая аутентификация не будет иметь той роли.

Таким образом к решению - можно добавить других избирателей, которые умирают перед ролевым избирателем. Каждый избиратель должен возвратить ПРЕДОСТАВЛЕНИЕ, ОТКЛОНИТЬ или ВОЗДЕРЖАТЬСЯ, и обработка только продолжается более поздним избирателям, если ВОЗДЕРЖИВАЮТСЯ, возвращается. Таким образом можно записать собственному избирателю (или снова использовать существующего, если это работало бы), имейте его огонь перед ролевым избирателем и безусловно предоставьте доступ к любым запросам к ресурсам, к которым Вы обращаетесь.

Я сделал что-то вроде этого в текущем проекте, где определенные переходные специализированные атрибуты могут позволить кому-то ресурсы доступа, что обычно они не могли бы, и он работает хорошо подходом.

2
ответ дан 14 December 2019 в 19:28
поделиться

Предполагая, что вы используете Spring Security 3, источник этой информации (какие атрибуты / роли настраиваются для конкретного пути), является фильтраинвоцитациямиМетметатаатазатриссий, которая вводится в фильтры. Таким образом, если у вас есть определенный URL, то вы можете запросить настроенные атрибуты, передав фильтровающую возможность (созданный из запроса и ответа) к методу FilterInvocationsecationseathermate ().

Получение ссылки на внутренние бобы, созданные пространством имен, может быть немного сложно. Предполагая, что у вас есть свой собственный боб (или бобы), от которого вы хотите сделать звонок от, вы можете ввести их в них, добавив его в них, добавив его, добавив его, добавив устройство 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 автоматически регистрирует WebInvocationPrivileGeevaluatoruator в контексте, который можно использовать для проверки того, имеет ли у пользователя возможность вызывать определенный URL, не вызывая его. Это похоже, в том, что он запрашивает безопасностьМЕТАТАДАТАСУРС, но не совсем то, что вы после здесь.

3
ответ дан 14 December 2019 в 19:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: