【发布时间】:2011-10-17 11:58:15
【问题描述】:
据我所知,CDI 应该在过滤器中工作,但我无法让它为我工作。代码如下所示:
@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 有一个非常相似的错误。如果您只使用
@EJB,它是否有效? -
JBoss AS 6 确实...@EJB 可能会工作。很烦,最后我只是通过 InitialContext 手动注入,但很高兴知道原因。
标签: dependency-injection java-ee-6 servlet-filters cdi jboss-weld