我有一个Jersey REST应用程序,并使用基于令牌的用户身份验证。当请求进入时,会创建一个自定义的
尽管需要两个过滤器,但这很好用。我一直在阅读关于使用HK2和
编辑:正如指出的那样,我基本上想在我的资源中注入一个定制类,类似于文档。但是,我似乎无法正确注册我的AbstractBinder以绑定注入我的类。我得到以下信息:
编辑2: 我设法取得了一些进展。我按以下方式创建了我的配置文件:
由于文档明确说明绑定剂的注入不是通过类而是通过实例不支持,然而我现在遇到了这个问题:
RestContext被@Inject注入到请求/响应过滤器中。然后用它来创建一个SecurityContext并将其设置在ContainerRequestContext中,在响应过滤器中清理它。难道响应过滤器不是请求作用域的吗?为什么我会收到错误信息?
RestContext
对象,并将其添加到ContainerRequestContext
属性中(通过在接收到请求后运行的筛选器)。此上下文管理用户授权(通过角色)和访问其他业务逻辑。它可用于资源中执行业务逻辑。处理请求时,在管道的最后执行第二个过滤器来清理RestContext
。尽管需要两个过滤器,但这很好用。我一直在阅读关于使用HK2和
InjectionResolver
的文章,我想知道是否可以使用注入将此RestContext
注入到我的资源和其他过滤器中(例如,我有一个过滤器从RestContext
创建SecurityContext
)。但我找不到答案。通常,如何为每个请求注入一个依赖于请求上下文的对象?这是可能的吗?是否有更简单的方法,例如使用@Context
?编辑:正如指出的那样,我基本上想在我的资源中注入一个定制类,类似于文档。但是,我似乎无法正确注册我的AbstractBinder以绑定注入我的类。我得到以下信息:
org.glassfish.hk2.api.UnsatisfiedDependencyException: There was no object available for injection at Injectee(requiredType=RestContext,parent=RestContextFilter,qualifiers={}),position=0,optional=false,self=false,unqualified=null,1435496015)
编辑2: 我设法取得了一些进展。我按以下方式创建了我的配置文件:
new ResourceConfig(allResources())
.packages(packagesToScan())
.registerInstances(new RestContextBinder());
由于文档明确说明绑定剂的注入不是通过类而是通过实例不支持,然而我现在遇到了这个问题:
A MultiException has 3 exceptions. They are:
1. java.lang.IllegalStateException: Not inside a request scope.
2. java.lang.IllegalArgumentException: While attempting to resolve the dependencies of my.package.RestContextFilter errors were found
3. java.lang.IllegalStateException: Unable to perform operation: resolve on my.package.RestContextFilter
RestContext被@Inject注入到请求/响应过滤器中。然后用它来创建一个SecurityContext并将其设置在ContainerRequestContext中,在响应过滤器中清理它。难道响应过滤器不是请求作用域的吗?为什么我会收到错误信息?
bind(RestContext.class).in(RequestScoped.class)
。这将允许你使用@Inject RestContext ctx;
,并确保每个请求只有一个实例存在。你可以将它注入到你的过滤器中,并设置必要的信息,然后在其他地方根据需要注入它。你不需要在ContainerRequestContext
上设置任何东西,只需注入你的RestContext
即可。这符合你的要求吗?如果是的话,我可以将其作为答案添加进去。 - Aldenclose()
方法,需要在 REST 方法执行后调用。它是如何绑定的呢?最后,这些内容在文档中的哪里可以找到?我找不到任何相关信息!谢谢 - Giovanni Botta