У меня есть страница JSF на Websphere Process Server (поверх WAS 7), которая имеет исключение ViewExpiredException.Когда это происходит, я хочу, чтобы пользователь вышел из системы, а затем снова вошел в нее. Я установил перенаправление для этого исключения в web.xml на следующую страницу выхода из системы:
<%
session.invalidate();
response.sendRedirect("ibm_security_logout?logoutExitPage=/faces/ToDosOpen.jsp");
%>
, которая затем перенаправляет настраница входа:
<%@ page import="com.ibm.wbit.tel.client.jsf.infrastructure.Messages, java.util.Locale" language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<%
String contextPath = request.getContextPath();
Locale locale = request.getLocale();
final String SECURITY_CHECK = "j_security_check";
%>
...
</head>
<body>
...
<h1><%= Messages.getString("LOGIN_LINE", locale) %></h1>
<div class="help-text"><%= Messages.getString("LOGIN_LINE_DESCR", locale) %></div>
<form target="_top" method="POST" action=<%= SECURITY_CHECK %>>
<table id="login-form">
<tr>
<td><%= Messages.getString("LOGIN_NAME", locale) %>:</td>
<td><input type="text" name="j_username"></td>
</tr>
<tr>
<td><%= Messages.getString("LOGIN_PASSWORD", locale) %>:</td>
<td><input type="password" name="j_password"></td>
</tr>
<tr>
<td id="login-button" colspan="2">
<input type="submit" name="login" value="
<%= Messages.getString("BUTTON_LOGIN", locale) %>"></td>
</tr>
</table>
</form>
И когда вы входите в систему, вы перенаправляетесь на страницу, которая вызвала исключение.Кроме того, что на самом деле происходит, исключение выдается снова, и мы возвращаемся на страницу входа.
Таким образом, вы должны войти в систему дважды.
Не уверен, что с этим делать или с чего начать искать.Любая помощь будет оценена.Я просмотрел существующие вопросы по этому вопросу и не смог их решить.
РЕДАКТИРОВАТЬ: я забыл упомянуть, что это работает нормально, если действие, которое вызвало исключение, было обновление,но завершается неудачно (необходимо дважды войти в систему), если действие щелкало по панели команд.