我正在做一些关于drop-wizard安全性和身份验证的研究。以下是我使用http://howtodoinjava.com/dropwizard/dropwizard-basic-auth-security-example/的链接。
我的问题是如何实际创建新用户,因为VALID_USERS是一个静态最终用户,无法更改。我在考虑创建一个数据库,它包含的用户对象包含用户名和角色ex。管理员。 (我不需要密码)但我很困惑我会回来。在他们的示例中,他们返回Optional.of(新用户(credentials.getUsername(),VALID_USERS.get(credentials.getUsername()))); 我会返回一个用户对象吗?
基本上,我想通过用户名对用户进行身份验证,并授予他们授权ex的作用。管理员,基本。但我想我很困惑如何生成用户及其角色列表。我正在考虑建立一个数据库,但我不确定我将如何实现它。
public class AppBasicAuthenticator implements Authenticator<BasicCredentials, User>
{
private static final Map<String, Set<String>> VALID_USERS = ImmutableMap.of(
"guest", ImmutableSet.of(),
"user", ImmutableSet.of("USER"),
"admin", ImmutableSet.of("ADMIN", "USER")
);
@Override
public Optional<User> authenticate(BasicCredentials credentials) throws AuthenticationException
{
if (VALID_USERS.containsKey(credentials.getUsername()) && "password".equals(credentials.getPassword()))
{
return Optional.of(new User(credentials.getUsername(), VALID_USERS.get(credentials.getUsername())));
}
return Optional.empty();
}
}
答案 0 :(得分:0)
在最新版本的DropWizard中,您可以发现可以进行身份验证和授权。简而言之,前者指示DropWizard在尝试访问资源或提供其他身份检查时使用基本身份验证时询问用户凭据。后者允许用户根据用户的角色授予用户访问各种资源的权限。
如何存储用户数据和角色的各种可能性。示例包括您提到的数据库,LDAP服务器和第三方身份管理系统。
如果您对基本身份验证感兴趣,可以查看我的示例here。数据库用于存储用户的凭证。另外,这是DropWizard authentication上有点过时的教程。最新版本的代码在上述示例应用程序中。
要仅实施身份验证,您可以跳过添加角色并注册授权人。要添加授权,您可以向您的用户实体添加角色集合,并使用@RolesAllowed和@PermitAll等注释以及Authorizer实现来授予/拒绝对您资源的访问权。
DropWizard身份验证文档的链接是here。
请随时在评论中提出更多问题并祝你好运。