当前位置: 首页 > 知识库问答 >
问题:

使用Dropwizard从身份验证器访问HttpServletRequest

微生俊健
2023-03-14
@Context
private HttpServletRequest servletRequest;

我使用以下方法注册了身份验证器:

env.jersey().register(
                new AuthDynamicFeature(new BasicCredentialAuthFilter.Builder<User>().setAuthenticator(new FooAuthentificator())
                        .setRealm("Realm").buildAuthFilter()));

共有1个答案

邬令
2023-03-14

这是有可能的,但问题是,authenticator从来没有经历过DI生命周期,因此它从来没有机会被注入。但我们能做的是自己直接注入它。为此,我们需要掌握ServiceLocator(它是主要的IoC容器,有点像Spring的ApplicationContext)。有了ServiceLocator之后,我们就可以调用Locator.Inject(anyObject)来显式解析任何注入依赖关系。

配置应用程序时,获取ServiceLocator的最简单的地方是Feature。在这里我们也可以注册泽西组件。在featurecontext(见下文)上调用register就像用Dropwizard调用env.jersey().register(...)一样,具有相同的效果。所以我们可以

public class AuthenticatorFeature implements Feature {

    @Override
    public boolean configure(FeatureContext ctx) {
        ServiceLocator locator = ServiceLocatorProvider.getServiceLocator(ctx);
        TestAuthenticator authenticator = new TestAuthenticator();
        locator.inject(authenticator);
        ctx.register(new AuthDynamicFeature(new BasicCredentialAuthFilter.Builder<User>()
                        .setAuthenticator(authenticator)
                        .setRealm("SEC REALM")
                        .buildAuthFilter()));
        ctx.register(new AuthValueFactoryProvider.Binder<>(User.class));
        return true;
    }
}

您可以看到通过调用locator.inject(authenticator)显式注入身份验证器。然后我们通过Dropwizard注册该功能

env.jersey().register(new AuthenticatorFeature());

经过测试,工作正常。

注意,如果您想知道如何可能注入HttpServletRequest,当没有当前请求时,这是因为注入了代理。与将请求注入Jersey过滤器一样,也会发生同样的事情;一个代理被注入,因为只有一个单例筛选器,但是请求从一个请求变化到另一个请求,所以需要注入一个代理。

另见:

    null
 类似资料:
  • 在DropWizard中,我可以设置基本身份验证,如下所示(在impl中): 领域在DropWizard中是什么意思,在中指定它有什么意义?它创造了一些东西与这个领域在引擎盖下?

  • Dropwizard是否也支持摘要验证?我只找到了基本的身份验证和OAuth。这方面的示例代码会很好。 null

  • 问题内容: 我一直在研究一个简单的API示例,即带有身份验证的ServiceStack Hello World示例的修改版本。概念验证的目的是创建一个RESTful API,该API包含要求身份验证的服务,这些服务完全可以通过Ajax从多个不同的Web项目访问。 我已经阅读了有关Wiki的认证和授权以及实现CORS的实现,(很多,结果[抱歉,没有足够的信誉指向相关链接])。此时,我的Hello服务

  • 我正在尝试在Dropwizard web应用程序中实现OAuth2身份验证。我已经创建了所需的<code>验证器 我所需的行为是,在我的客户端通过在我的登录页面上提供他/她的凭据登录后,我想将客户端重定向到我使用Dropwizard Views创建的问候语页面,并且路径为“/me”,如下所示: 我的问候资源如下所示: 目前,我得到一个“访问此资源需要凭据。”登录后的响应。在阅读了一些关于令牌认证的

  • 我正在使用预装的Visual Studio解决方案开发我的首批OAuth解决方案之一。 不过,同时我也希望我的服务器应用程序拥有“完全访问权限”。他们需要能够获得列表增加多个用户,删除东西等等。 下面是我的问题,我认为这些问题可以很容易地一起回答: 如何管理两个短期令牌(承载令牌?)连同永久令牌(API令牌?) 我在访问级别上有何不同,因此某些方法需要永久令牌? 在同一方法中,我在访问级别上有何不