Nano Hash - криптовалюты, майнинг, программирование

Spring Security удаляет префикс RoleVoter

В проекте, над которым я работаю, мы аутентифицируемся на основе идентификаторов ролей, а не описания ролей, и это сопоставление хранится в базе данных.

Мой вопрос: как удалить префикс RoleVoter Spring Security для реализации дизайна, как указано выше?

07.02.2014

Ответы:


1

Безопасность Spring RoleVoter нуждается в префиксе, чтобы различать предоставленные полномочия, которые являются ролями, см. этот ответить для получения дополнительной информации.

Если вы хотите изменить это, вы всегда можете указать свой собственный AccessDecisionManager and configure it with a customRoleVoter`.

Это пример такого пользовательского диспетчера решений доступа:

public class MyAccessDecisionManager  extends AffirmativeBased {


    public MyAccessDecisionManager() {
        super();
        List<AccessDecisionVoter> decisionVoters = new ArrayList<AccessDecisionVoter>();
        RoleVoter roleVoter = new MyCustomRoleVoter();
        decisionVoters.add(roleVoter);
        AuthenticatedVoter authenticatedVoter = new AuthenticatedVoter();
        decisionVoters.add(authenticatedVoter);
        setDecisionVoters(decisionVoters);

    }

И для использования его вместо диспетчера решений доступа по умолчанию:

<bean id="myAccessDecisionManager" class="full.package.name.MyAccessDecisionManager" />

<security:http access-decision-manager-ref="myAccessDecisionManager">
    ...
</security:http>
08.02.2014
  • Как настроить его в spring-security.xml? 10.02.2014
  • Конструктор AffirmativeBased() не определен в весенней безопасности 4.1.3. 20.12.2016

  • 2

    Может быть кому-то нужно решение с аннотацией на основе веб-приложения

    @Configuration
    @EnableGlobalMethodSecurity(securedEnabled = true)
    protected static class GlobalSecurityConfig extends GlobalMethodSecurityConfiguration {
        @Override
        protected AccessDecisionManager accessDecisionManager() {
            AffirmativeBased accessDecisionManager = (AffirmativeBased)super.accessDecisionManager();
            for(AccessDecisionVoter voter: accessDecisionManager.getDecisionVoters()){
                if(voter instanceof RoleVoter){
                    // do what you whant
                }
            }
            return accessDecisionManager;
        }
    }
    
    
    
    @Configuration
    @EnableWebSecurity
    protected static class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {
        @Bean
        @Primary
        public AccessDecisionManager accessDecisionManager() {
            List<AccessDecisionVoter<? extends Object>> decisionVoters = Arrays.asList(
                    new WebExpressionVoter(),
                    new RoleVoter(),
                    new AuthenticatedVoter()
            );
            return new AffirmativeBased(decisionVoters);
        }
    }
    
    16.05.2019

    3

    Начиная с Spring 4 замените hasRole("X") на hasAuthority("X").

    https://docs.spring.io/autorepo/docs/spring-security/4.0.0.RC1/reference/html/el-access.html

    02.08.2020
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..