我正试图使用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