Мы используем Struts2 & GWT-EXT.
Мы создали LoginInterceptor, который будет вызываться перед выполнением определенных ограниченных задач.
Вот метод LoginInterceptor
public String intercept(ActionInvocation arg0) throws Exception {
try
{
System.err.println("inside the login interceptor");
Map session = arg0.getInvocationContext().getSession();
User loggedInUser = (User)session.get("loggedInUser");
if(loggedInUser != null)
{
return arg0.invoke();
}else {
throw new AuthorizationException("unAuthorized");
}
}catch (Exception e) {
throw e;
}
}
После тайм-аута сессии. Если пользователь нажимает на любую кнопку. Перед продолжением вызова LoginInterceptor и проверяет, вошел ли пользователь в систему или нет.
В коде
У нас есть метод public void onFailure(Throwable caught) {
где я проверяю это
if (caught instanceof InvocationException) {
if (caught instanceof StatusCodeException
&& caught.getMessage().contains(
"<title>Error 500 unAuthorized</title>")) {
MessageBox.alert("Session Expired", "Session has been expired. Press Ok to redirect to Login page.", new AlertCallback(){
public void execute(){
History.newItem(HistoryToken.INDEX_PAGE.toString());
}
});
} else if (caught.getMessage().contains("LoginInterceptor")) {
History.newItem(HistoryToken.INDEX_PAGE.toString(), true);
}
Затем я перенаправляю его на страницу индекса.
Это хорошо работает в Eclipse в Hosted Mode, но когда я создаю .war и запускаю его в JBoss. Он не входит в метод onFailure
и перенаправляется непосредственно на страницу индекса.