将CDI bean注入ContainerRequestFilter会导致UnsatisfiedDependencyException

时间:2013-09-17 11:37:33

标签: jersey jersey-2.0

我正在尝试将请求过滤器的工作委托给CDI bean。但是当我打电话给RestURL时,Glassfish 4.0给了我一个优秀的感觉。

过滤器定义

@Provider
@Authenticated
public class AuthenticationFilter implements ContainerRequestFilter{

@Inject
private AuthenticationService authenticationService;

@Override
public void filter(ContainerRequestContext containerRequestContext) throws IOException {
    String token = containerRequestContext.getHeaderString("x-authentication-token");

    if (!authenticationService.isAuthenticated(token)) {

        containerRequestContext.abortWith(Response.serverError().entity("No authentication").build());
    }

}
}

定义NameBinding,以便我们可以标记特定的资源URL。

@NameBinding
@Target({ ElementType.TYPE, ElementType.METHOD })
@Retention(value = RetentionPolicy.RUNTIME)
public @interface Authenticated {
}

CDI bean的定义。

@ApplicationScoped
public class AuthenticationService {
    public boolean isAuthenticated(String token) {
        boolean result = false;
        if (token != null && token.length() > 0) {
            ....
        }
        return result;
    }
}

我在WEB-INF目录中有一个bean.xml文件

<beans
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                  http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
    bean-discovery-mode="all">

</beans>

由于 鲁迪

0 个答案:

没有答案