How to authenticate Dropwizard admin portal, so as to restrict normal users from accessing it? Please help
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
由
翻译强力驱动
问题:
回答1:
In your config, you can set adminUsername and adminPassword under http like so:
http: adminUsername: user1234 adminPassword: pass5678 回答2:
For DW 0.7 my approach would be:
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 { } } and using them in the way:
environment.admin().setSecurityHandler(new AdminConstraintSecurityHandler(...)) 回答3:
Newer Jetty versions do not have MappedLoginService, so @Kamil's answer no longer works. I have modified their answer to get it working as of 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)