在用户以编程方式登录我的Web应用程序后,我在与会话范围的托管bean交互时遇到一些困难。
背景:
我有一个名为“SessionHelper”的[javax.enterprise.context。]会话范围的bean,我在用户使用该应用程序时会收集很多信息。在我的登录页面(不 SessionScoped)中,以下是我正在做的一个示例:
@Inject SessionHelper theHelper;
....
FacesContext theContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = theContext.getExternalContext();
HttpServletRequest theRequest = (HttpServletRequest) externalContext.getRequest();
....
theRequest.login(username, password);
....
theSession.method(dostuff);
执行此部分代码后,我的应用程序会重定向到受保护的目录,并允许用户(基于角色)执行其工作职能。
当我尝试“@Inject SessionHelper”进入我的任何受保护资源时,我的理解是我应该在调用login之后获得具有数据集的SessionHelper的特定SessionScoped实例。只要会话(针对特定用户)有效,我就可以使用此功能。不幸的是,我得到的实例中没有我的“theSession.method(dostuff)”。
我是否从根本上误解了范围?
我唯一可能看到的是,在创建会话后,初始的@Inject进入我的登录页面不会被继承。如果是这种情况,有没有办法在创建会话后强制重新注入?
一如既往,非常感谢你的帮助!!