我正在尝试使用JAX-RS(特别是Jersey实现)构建REST API。我尝试像在this StackOverflow question中那样实现身份验证。
基本上,我基于授权标头使用ContainerRequestFilter
来过滤HTTP请求。此类定义了一个属性,并带有@Inject
属性(我使用的是Kotlin,而不是Java):
@Inject
var authenticationService: IAuthenticationService? = null
我已经在我的AbstractBinder中注册了此身份验证服务:
class MyApplicationBinder : AbstractBinder() {
override fun configure() {
bind(AuthenticationService::class.java) to IAuthenticationService::class.java
}
}
并将此应用程序绑定程序注册到我的ResourceConfig
:
class MyResourceConfig : ResourceConfig() {
init {
// ...
register(MyApplicationBinder())
}
}
但是我在启动时遇到运行时异常:
org.glassfish.hk2.api.UnsatisfiedDependencyException:
There was no object available for injection at SystemInjecteeImpl(
requiredType=IAuthenticationService,
parent=AuthenticationRequestFilter,
qualifiers={},
position=-1,
optional=false,
self=false,
unqualified=null,
452444366
)
我不知道为什么HK2容器会忽略我AbstractBinder中的注册!有人可以帮我吗?谢谢!