java - Dropwizard 身份验证用户

标签 java authentication dropwizard

我正在做一些关于 drop-wizard 安全性和身份验证的研究。这是我使用的链接 http://howtodoinjava.com/dropwizard/dropwizard-basic-auth-security-example/ .

我的问题是如何实际创建新用户,因为 VALID_USERS 是静态的,无法更改。我正在考虑创建一个数据库,该数据库将由包含用户名和角色 ex 的用户对象组成。行政。 (我不需要密码)但我很困惑我会返回什么。在他们的示例中,他们返回了Optional.of(new User(credentials.getUsername(), VALID_USERS.get(credentials.getUsername()))); 我会返回一个用户对象吗?

本质上,我想通过用户名对用户进行身份验证,并赋予他们授权前的角色。管理,基本。但我想我对如何生成用户及其角色列表感到困惑。我正在考虑制作一个数据库,但我不确定如何具体实现它。

    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();
    }
}

最佳答案

在最新版本的 DropWizard 中,您可以发现可以进行身份​​验证和授权。简而言之,前者指示 DropWizard 在用户尝试访问资源或提供其他身份检查时,如果您使用基本身份验证,则要求用户提供凭据。后者允许根据用户的角色授予用户对各种资源的访问权限。

存储用户数据和角色的方式有多种。示例包括您提到的数据库、LDAP 服务器和第三方身份管理系统。

如果您对基本身份验证感兴趣,可以看一下我的示例 here 。数据库用于存储用户的凭据。另外,这是我关于 DropWizard authentication 的有点过时的教程。 。最新版本的代码位于上述示例应用程序中。

要仅实现身份验证,您可以跳过添加角色和注册授权者。要添加授权,您可以将角色集合添加到您的 User 实体,并使用 @RolesAllowed 和 @PermitAll 等注释以及 Authorizer 实现来授予/拒绝对您的资源的访问。

DropWizard 身份验证文档的链接是 here .

请随时在评论中提出更多问题,祝你好运。

关于java - Dropwizard 身份验证用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40369415/

相关文章:

java - 如何在 GXT 中合并网格单元格

java - Volley 库无法将数据发布到服务器

在 Status Created 上设置 Location header 路径时,Javax Response 在方法路径前添加

java - 使用 swagger inflector 和 dropwizard 上传文件

java - 使用 EJB 注释的依赖注入(inject)

java - Java Atomics 是否只需要相对于 VM 的原子性

Excel VBA : NTLM/Kerberos & Negotiate Authentication in VBA-Web/WinHttp

jsp - Joomla 2.5 自定义身份验证插件,通过外部 jsp 网站进行身份验证

python - Django:一个 View 的基本身份验证(避免中间件)

java - 在 Heroku 上运行 Dropwizard 应用 : R10 failed to bind to $PORT