제가 아는 한, CDI는 필터에서 작동해야하지만, 저를 위해 작동 할 수는 없습니다. 코드는 다음과 같습니다@Inject in filter가 작동하지 않습니다.
@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 (를 통해 수동으로 그것을 할 경우 작동) 또는 서블릿에서 :
@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' 만 사용하면 제대로 작동합니까? – BalusC
JBoss AS 6 실제로 ... @EJB가 아마 작동 할 것입니다. 매우 성가신, 난 그냥 수동으로 끝에 InitialContext 통해 주입했지만 좋은 이유를 알고 있습니다. –