0

我正在尝试使用 togglz 在 Springboot 中实现 UsernameActivation Startegy,但由于示例/文档不足,我无法这样做。这是一个简单的 Maven Poc。这是我的课程:

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 有某种关系。另外,我不确定它将如何比较用户名值以及如何捕获当前用户值。任何关于这个的想法都会有很大的帮助!

4

1 回答 1

1

我不得不重写 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
于 2020-07-19T21:31:45.597 回答