我有一个使用JSF 2.2构建的Web应用程序,部署在WebLogic 12.2.1.1上。
我已经在web.xml中将会话超时设置为480,以使其保持至少8小时的活动状态。
<session-config>
<session-timeout>
480
</session-timeout>
</session-config>
然而,当我的网页应用程序长时间不使用时,它仍会在15分钟内超时。我的LoginSession JSF管理的bean被定义为session作用域,正在重新初始化。
@ManagedBean(name = "loginsession")
@SessionScoped
public class LoginSession implements Serializable {
private boolean userLoggedIn;
public LoginSession() {
}
public boolean isUserLoggedIn() {
return userLoggedIn;
}
public void setUserLoggedIn(boolean userLoggedIn) {
this.userLoggedIn = userLoggedIn;
}
}
一旦用户登录应用程序,LoginSession中的userLoggedIn变量将设置为true。
然而,15分钟后,当LoginSession被注入到ViewScoped bean中时,userLoggedIn变成了false,并将我重定向到错误页面。
@ManagedBean(name = "home")
@ViewScoped
public class Home {
@ManagedProperty("#{loginsession}")
private LoginSession loginSession;
public Home() {
}
public void prepare() {
try {
if (!loginSession.isUserLoggedIn()) {
Exception ex = new Exception("User Not Logged In. Please <span class=\"text-bold text-danger\"><a href=\"/WebUtil/faces/login/index.xhtml\" class=\"text-danger\">RE-LOGIN</a></span> .");
Helper.redirectToErrorPage(ex, loginSession);
return;
}
}
}
public LoginSession getLoginSession() {
return loginSession;
}
public void setLoginSession(LoginSession loginSession) {
this.loginSession = loginSession;
}
}
我找不出问题所在,希望有人能给我一点提示。谢谢。
编辑:
@ManagedBean(name = "login")
@RequestScoped
public class LoginPage {
@ManagedProperty("#{loginsession}")
private LoginSession loginSession;
public void setLoginSession(LoginSession bea) {
loginSession = bea;
}
public void prepare() {
loginSession.setUserLoggedIn(false);
}
public String submit() {
loginSession.setUserLoggedIn(true);
return "/faces/floor/Home.xhtml?faces-redirect=true";
}
}
当用户输入凭据并点击登录时,将执行submit()方法。当登录页面加载时,将执行prepare()方法。