在 Java REST API 中注入到 ContainerRequestFilter

cub*_*buk 5 java rest glassfish jax-rs jersey

我想我正在处理 Glassfish 4 中的一个错误;但我不确定。基本上我试图将服务注入到 ContainerRequestFilter 中;但我在尝试时遇到了异常。我可以在进行休息调用的资源中进行注入,但不能对过滤器使用注入。glassfish jira 中有一个已归档的错误:https : //java.net/jira/browse/GLASSFISH-20597。我尝试了那里提到的解决方法,但没有解决我的问题。

这是我得到的例外:

org.glassfish.hk2.api.UnsatisfiedDependencyException: There was no object available for injection at Injectee(requiredType=Authenticator,parent=SecurityInterceptor,qualifiers
Run Code Online (Sandbox Code Playgroud)

这是我正在使用的代码,您知道我在这里缺少什么吗?

@Provider
@PreMatching
public class SecurityInterceptor implements ContainerRequestFilter {

@Inject
private Authenticator authenticator; // can't inject this service here, but I can inject this to RequestScoped Resources
private static final Logger LOG = Logger.getLogger(SecurityInterceptor.class.getName());

@Override
public void filter(ContainerRequestContext requestContext) throws IOException {
    if (!requestContext.getMethod().equals("OPTIONS")) {
        String path = OyumBuFunctions.normalizeString(requestContext.getUriInfo().getPath());
            String authToken = requestContext.getHeaderString(OyumbuRestHeaders.AUTH_TOKEN_HEADER);
            if (!authenticator.isAuthTokenValid(authToken)) {
                requestContext.abortWith(Response.status(Response.Status.UNAUTHORIZED).build());
            }
            else{
                LOG.log(Level.INFO, "authenticated");
            }
    }        
  }
}
Run Code Online (Sandbox Code Playgroud)

cub*_*buk 1

正如这个答案/sf/answers/1679735781/中提到的,@Path为要注入的服务提供注释可以节省这种情况。仍然不明白如何正确解决它,但只是写在这里,以便对遇到类似问题的人有用。