Togglz-用户名激活策略的实现



我正试图使用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");
}


}

我想使用用户名激活策略,但我不确定我还需要做什么代码更改才能使其工作。我知道它在某种程度上与UserProvider有关。此外,我不确定它将如何比较用户名值,以及它将如何捕获当前用户值。任何关于这方面的想法都会有很大帮助!

我不得不重写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

最新更新