Togglz - Реализация стратегии активации имени пользователя - PullRequest
0 голосов
/ 09 июля 2020

Я пытаюсь реализовать Startegy UsernameActivation в Springboot с помощью togglz, но из-за недостаточного количества примеров / документации по этому вопросу я не могу этого сделать. Это простой Po c в maven. Вот мои классы:

public enum Features implements Feature{
    
     @Label("just a description")
        @EnabledByDefault
        HELLO_WORLD,
        
        @Label("Hello World Feature")
        @DefaultActivationStrategy(id = UsernameActivationStrategy.ID, parameters = 
    {@ActivationParameter(name = UsernameActivationStrategy.PARAM_USERS, value = "suga")        
        })
        HELLO,

        @Label("another descrition")
        @EnabledByDefault
        REVERSE_GREETING;

        public boolean isActive() {
            return FeatureContext.getFeatureManager().isActive(this);
        }

}

@Component
public class Togglz implements TogglzConfig {
    
     public Class<? extends Feature> getFeatureClass() {
            return Features.class;
        }

        public StateRepository getStateRepository() {
            return new FileBasedStateRepository(new File("/tmp/features.properties"));
        }

        

        public UserProvider getUserProvider() {
            return new SpringSecurityUserProvider("ADMIN_ROLE");
        }
        
     

}

Я хочу использовать стратегию UsernameActivation, но не уверен, какие еще изменения кода мне нужно сделать, чтобы она работала. Я знаю, что это как-то связано с UserProvider. Кроме того, я не уверен, как он будет сравнивать значение имени пользователя и как он будет фиксировать текущее значение пользователя. Любая идея по этому поводу будет большим подспорьем!

1 Ответ

1 голос
/ 20 июля 2020

Мне пришлось переопределить метод getUserProvider. Поскольку я использую Spring для автоконфигурации и не расширяю ToggleConfig, я добавил это как bean-компонент для загрузки при запуске.

@Bean
public UserProvider getUserProvider() {
        return new UserProvider() {

            @Override
            public FeatureUser getCurrentUser() {
                String username = <MyAppSecurityProvider>.getUserName();
                boolean isAdmin = "admin".equals(username);

                return new SimpleFeatureUser(username, isAdmin);

            }
        };
    }

Примечание: мне пришлось сделать это, поскольку мое приложение использует наш встроенный механизм безопасности . Читая документацию, кажется, что это проще, если вы используете стандартную безопасность, такую ​​как Spring или Servlet.

Моя конфигурация в application.yml (то же, что у вас в аннотации)

togglz:
  features:
    FRIST_FEATURE:
      enabled: true
      strategy: username
      param:
        users: user1,user2
    SECOND_FEATURE:
      enabled: true
      strategy: username
      param:
        users: user2,user3
...