@Context
private HttpServletRequest servletRequest;
我使用以下方法注册了身份验证器:
env.jersey().register(
new AuthDynamicFeature(new BasicCredentialAuthFilter.Builder<User>().setAuthenticator(new FooAuthentificator())
.setRealm("Realm").buildAuthFilter()));
这是有可能的,但问题是,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过滤器一样,也会发生同样的事情;一个代理被注入,因为只有一个单例筛选器,但是请求从一个请求变化到另一个请求,所以需要注入一个代理。
另见:
在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令牌?) 我在访问级别上有何不同,因此某些方法需要永久令牌? 在同一方法中,我在访问级别上有何不