据我所知,CDI应该使用过滤器,但是我无法让它为我工作。代码如下所示:@Inject in filter does not work
@WebFilter(filterName="authFilter",servletNames={"Faces Servlet"})
public class AuthFilter implements Filter {
@Inject UserBean userBean;
public AuthFilter() {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
userBean.doSomething(); // Causes NullPointerException
chain.doFilter(request, response);
}
}
UserBean.class
@Stateless
public class UserBean extends JPABean{
// Omitted
}
CDI启用,并注入工作,如果我通过InitialContext.doLookup(做手动),或在Servlet中,像这样的:
@WebServlet(name = "MyServlet", urlPatterns = {"/MyPage"})
@ServletSecurity(@HttpConstraint(rolesAllowed={"somerole"}))
public class MyServlet extends HttpServlet {
@Inject private UserBean userBean;
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
userBean.doStuff(); // Works
response.sendRedirect(request.getContextPath());
}
CDI不在滤镜中工作吗?在那种情况下,为什么不呢?如果应该的话,我可能会做错什么?
什么容器? JBoss AS 6有一个非常类似的bug。如果你只是使用'@EJB',它会起作用吗? – BalusC
JBoss AS 6确实...... @EJB可能会工作。非常恼人的是,我最后通过InitialContext进行了手动注入,但很好理解。 –