我正在尝试使用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有关。此外,我不确定它将如何比较username值,以及它将如何捕获当前用户值。任何关于这方面的想法都会有很大的帮助!
发布于 2020-07-20 05:31:46
我必须重写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,user3https://stackoverflow.com/questions/62816380
复制相似问题