【发布时间】:2015-04-09 09:44:35
【问题描述】:
我使用的是 TomEE+ 1.7.1。 使用 JSF 托管 bean,这段代码运行良好:
@ManagedBean( eager = true )
@ApplicationScoped
public class AppBean {
@PostConstruct
public void init() {
ServletContext sc = (ServletContext) FacesContext.getCurrentInstance().getExternalContext().getContext();
if (GlobalSettings.TESTMODE) {
sc.getSessionCookieConfig().setDomain("." + GlobalSettings.APP_DOMAIN_TEST);
} else {
sc.getSessionCookieConfig().setDomain("." + GlobalSettings.APP_DOMAIN);
}
}
}
init 函数在应用程序启动时运行,并且 ServletContext 可用。
我到处读到是时候迁移到 CDI bean 而不是 JSF bean。所以我想将@ManagedBean( eager = true ) 更改为@Named @Eager(@Eager 来自 Omnifaces)。 Init 函数在应用程序启动时运行,但没有 FacesContext,所以我无法获取 ServletContext。
一般问题:如何在 CDI bean 的非请求环境中获取 ServletContext? (ServletContext 不是一个 'per request' 对象,所以它应该在第一个请求之前存在。)
具体问题:如何在第一个请求发生之前从代码中动态设置会话 cookie 的域?
【问题讨论】:
标签: jsf cookies initialization cdi