根据您的评论,您希望访问用户主体。您可以像这样注入它:@Inject Principal principal;
或者@Resource Principal principal;
,请参阅Java EE 6 教程。
更新
我会回答你的直接问题。在 Java EE 7 (CDI 1.1) 中,支持开箱即用的 HttpServletRequest 注入。但是,在 Java EE 6 (CDI 1.0) 中,不支持开箱即用。要使其正常工作,请将以下类包含到您的网络应用程序中:
import javax.enterprise.inject.Produces;
import javax.servlet.ServletRequest;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.annotation.WebListener;
@WebListener
public class CDIServletRequestProducingListener implements ServletRequestListener {
private static ThreadLocal<ServletRequest> SERVLET_REQUESTS = new ThreadLocal<>();
@Override
public void requestInitialized(ServletRequestEvent sre) {
SERVLET_REQUESTS.set(sre.getServletRequest());
}
@Override
public void requestDestroyed(ServletRequestEvent sre) {
SERVLET_REQUESTS.remove();
}
@Produces
private ServletRequest obtain() {
return SERVLET_REQUESTS.get();
}
}
注意:仅在 GlassFish 3.1.2.2 上测试