gpt4 book ai didi

java - 将委托(delegate)人注入(inject) Jersey 2 中的资源方法

转载 作者:行者123 更新时间:2023-11-29 08:55:16 26 4
gpt4 key购买 nike

我正在使用 Jersey 2 开发 REST API,目前我正在尝试通过使用类似于 Dropwizard 中的 @Auth 的注释来合并基本身份验证。与

@Path("hello")
public class HelloResource {
@GET
@Produces("application/json")
public String hello(@Auth final Principal principal) {
return principal.getUsername();
}
}

hello 资源调用应该被一些代码拦截,这些代码使用授权 HTTP 请求 header 中传递的凭据执行基本身份验证,并在成功时将主体注入(inject)方法主体参数。

我已经开始创建一个@Auth 解析器,见下文,但我看不到如何从其中访问授权 HTTP 请求 header ?

@Singleton
public class AuthResolver {
public static class AuthInjectionResolver extends ParamInjectionResolver<Auth> {
public AuthInjectionResolver() {
super(AuthValueFactoryProvider.class);
}
}

@Singleton
public static class AuthValueFactoryProvider extends AbstractValueFactoryProvider {
@Inject
public AuthValueFactoryProvider(final MultivaluedParameterExtractorProvider extractorProvider, final ServiceLocator injector) {
super(extractorProvider, injector, UNKNOWN);
}

@Override
protected Factory<?> createValueFactory(final Parameter parameter) {
final Class<?> classType = parameter.getRawType();
return classType == null || !classType.equals(Principal.class) ? null :
new AbstractContainerRequestValueFactory<Principal>() {
@Override
public Principal provide() {
// Authentication?
}
};
}
}

public static class Binder extends AbstractBinder {
@Override
protected void configure() {
bind(AuthValueFactoryProvider.class).to(ValueFactoryProvider.class).in(Singleton.class);
bind(AuthInjectionResolver.class).to(
new TypeLiteral<InjectionResolver<Auth>>() {
}
).in(Singleton.class);
}
}
}

如何解决这个问题? :)

最佳答案

啊,在AbstractContainerRequestValueFactory<Principal>我可以添加

@Context private ResourceContext context;

然后在 provide 方法中提取 HTTP 请求及其 header 。

关于java - 将委托(delegate)人注入(inject) Jersey 2 中的资源方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20589268/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com