У меня есть веб-приложение, созданное с использованием JSF 2.2 и развернутое в WebLogic 12.2.1.1.
Я установил время ожидания сеанса в web.xml как 480, чтобы оно оставалось активным не менее 8 часов.
<session-config>
<session-timeout>
480
</session-timeout>
</session-config>
Тем не менее, мое веб-приложение по-прежнему отключается в течение 15 минут, когда оно простаивает. Мой управляемый компонент JSF LoginSession, определенный в области сеанса, повторно инициализируется.
@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;
}
}
Для переменной userLoggedIn в LoginSession устанавливается значение true, когда пользователь входит в приложение.
Однако через 15 минут, когда LoginSession внедряется в bean-компонент ViewScoped, userLoggedIn оказывается ложным и перенаправляет меня на страницу с ошибкой.
@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() выполняется при загрузке страницы входа.
Как/где вы устанавливаете true?
пожалуйста, смотрите мои правки в посте выше.
Выглядит нормально для меня до сих пор. Не заметил твоего редактирования, потому что ты не @SirishV меня. А вы уверены, что web.xml вообще эффективен? Что касается более старого ответа, он должен иметь приоритет над значениями по умолчанию WEB-INF/weblogic.xml или weblogic: stackoverflow.com/questions/12930703/…
@Selaron Я считаю, что если web.xml неэффективен, то по умолчанию время ожидания сеанса должно быть равно 30 минутам. Эта проблема несколько противоречива, и я не смог воспроизвести ее сегодня, даже после того, как приложение простояло в фоновом режиме более 60 минут. У меня нет файла weblogic.xml, а время ожидания моего сервера weblogic по умолчанию установлено на 60 минут.
Как упоминалось выше. Проверьте с помощью простого простого jsp или сервлета, на 99,9% уверенного, что это не связанный с JSF
Может быть, это не связано с JSF. Я предполагаю, что это может быть проблема с кластеризацией в балансировщике нагрузки ... все еще пытаюсь понять это.
Если это не связано с приложением, с постоянными 15-минутными тайм-аутами я бы намекнул, что это связано с сетью; возможно, правило брандмауэра. Принимая во внимание кластеризацию, можете ли вы проверить, существует ли она только на одном или на всех узлах кластера?





Теперь эта проблема решена. Это была проблема с перенаправлением балансировщика нагрузки на другой сервер после определенного периода бездействия.
Вы действительно говорите, что если вы не используете JSF, у вас нет этой проблемы?