首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Togglz -用户名激活策略实现

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

Stack Overflow用户
提问于 2020-07-09 21:47:51
回答 1查看 241关注 0票数 0

我正在尝试使用togglz在Springboot中实现UsernameActivation Startegy,但由于在这方面的示例/文档不足,我无法这样做。这是一个用maven编写的简单的Poc。以下是我的类:

代码语言:javascript
复制
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值,以及它将如何捕获当前用户值。任何关于这方面的想法都会有很大的帮助!

EN

回答 1

Stack Overflow用户

发布于 2020-07-20 05:31:46

我必须重写getUserProvider方法。因为我使用Spring进行自动配置,而不是扩展ToggleConfig,所以我将其添加为一个bean,以便在启动时加载。

代码语言:javascript
复制
@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中的配置(与注释中的配置相同)

代码语言:javascript
复制
togglz:
  features:
    FRIST_FEATURE:
      enabled: true
      strategy: username
      param:
        users: user1,user2
    SECOND_FEATURE:
      enabled: true
      strategy: username
      param:
        users: user2,user3
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62816380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档