【问题标题】:Restricting dropwizard admin page限制 dropwizard 管理页面
【发布时间】:2018-02-13 07:12:42
【问题描述】:

如何对 Dropwizard 管理门户进行认证,以限制普通用户访问? 请帮忙

【问题讨论】:

    标签: dropwizard


    【解决方案1】:

    在您的配置中,您可以在http 下设置adminUsernameadminPassword,如下所示:

    http:
      adminUsername: user1234
      adminPassword: pass5678
    

    【讨论】:

    • 只要确保不要将这些存储在像 GitHub 这样的公共存储库中...... :-)
    • 你知道在 DW 0.7.1 的配置文件中是否也可以这样做?
    • 不适用于 DW 0.8.4,配置规范中未提及这些字段。
    【解决方案2】:

    对于 DW 0.7,我的方法是:

    public class AdminConstraintSecurityHandler extends ConstraintSecurityHandler {
    
        private static final String ADMIN_ROLE = "admin";
    
        public AdminConstraintSecurityHandler(final String userName, final String password) {
            final Constraint constraint = new Constraint(Constraint.__BASIC_AUTH, ADMIN_ROLE);
            constraint.setAuthenticate(true);
            constraint.setRoles(new String[]{ADMIN_ROLE});
            final ConstraintMapping cm = new ConstraintMapping();
            cm.setConstraint(constraint);
            cm.setPathSpec("/*");
            setAuthenticator(new BasicAuthenticator());
            addConstraintMapping(cm);
            setLoginService(new AdminMappedLoginService(userName, password, ADMIN_ROLE));
        }
    }
    
    public class AdminMappedLoginService extends MappedLoginService {
    
        public AdminMappedLoginService(final String userName, final String password, final String role) {
            putUser(userName, new Password(password), new String[]{role});
        }
    
        @Override
        public String getName() {
            return "Hello";
        }
    
        @Override
        protected UserIdentity loadUser(final String username) {
            return null;
        }
    
        @Override
        protected void loadUsers() throws IOException {
        }
    }
    

    并以方式使用它们:

    environment.admin().setSecurityHandler(new AdminConstraintSecurityHandler(...))
    

    【讨论】:

    • 此答案不适用于更高版本的 DW/Jetty。请参阅下面我的答案,该答案自 DW 1.2.2 起生效
    【解决方案3】:

    较新的 Jetty 版本没有 MappedLoginService,因此 @Kamil 的答案不再有效。我已经修改了他们的答案以使其从 Dropwizard 1.2.2 开始工作:

    public class AdminConstraintSecurityHandler extends ConstraintSecurityHandler {
    
        private static final String ADMIN_ROLE = "admin";
    
        public AdminConstraintSecurityHandler(final String userName, final String password) {
            final Constraint constraint = new Constraint(Constraint.__BASIC_AUTH, ADMIN_ROLE);
            constraint.setAuthenticate(true);
            constraint.setRoles(new String[]{ADMIN_ROLE});
            final ConstraintMapping cm = new ConstraintMapping();
            cm.setConstraint(constraint);
            cm.setPathSpec("/*");
            setAuthenticator(new BasicAuthenticator());
            addConstraintMapping(cm);
            setLoginService(new AdminLoginService(userName, password));
        }
    
        public class AdminLoginService extends AbstractLoginService {
    
            private final UserPrincipal adminPrincipal;
            private final String adminUserName;
    
            public AdminLoginService(final String userName, final String password) {
                this.adminUserName = Objects.requireNonNull(userName);
                this.adminPrincipal = new UserPrincipal(userName, new Password(Objects.requireNonNull(password)));
            }
    
    
            @Override
            protected String[] loadRoleInfo(final UserPrincipal principal) {
                if (adminUserName.equals(principal.getName())) {
                    return new String[]{ADMIN_ROLE};
                }
                return new String[0];
            }
    
            @Override
            protected UserPrincipal loadUserInfo(final String userName) {
                return adminUserName.equals(userName) ? adminPrincipal : null;
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-29
      • 1970-01-01
      • 2014-08-24
      • 2015-11-01
      • 2015-04-12
      • 2021-01-02
      • 1970-01-01
      相关资源
      最近更新 更多