JSF网络应用程序超时问题

3

我有一个使用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()方法。


你是真的在说,如果你不使用JSF,你就没有这个问题吗? - Kukeltje
你要在哪里设置它为“true”? - Selaron
请查看我在上面帖子中的编辑。 - Sirish V
1
到目前为止,看起来还不错。因为你没有@SirishV我,所以我没有注意到你的编辑。你确定web.xml实际上起作用了吗?根据一个旧答案,它应该优先于WEB-INF/weblogic.xml或weblogic默认值:https://dev59.com/XGnWa4cB1Zd3GeqP3LO8 - Selaron
@Selaron 我认为如果web.xml无效,它至少应该将会话超时默认设置为30分钟。这个问题有些不一致,即使我今天把应用程序闲置在后台超过60分钟,也无法复制它。我没有weblogic.xml文件,我的weblogic服务器超时默认设置为60分钟。 - Sirish V
显示剩余3条评论
1个回答

2

这个问题现在已经解决了。这是由于负载均衡器在一定时间内闲置后重定向到另一个服务器引起的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接