Я пытаюсь реализовать правильный выход для моего приложения Java EE / JSF2.
Это требует двух вещей:
- Мне нужно выйти из JAAS и сделать сеанс недействительным
- Затем мне нужно перейти на внешний URL-адрес, чтобы запустить выход из Siteminder
URL-адрес выхода из Siteminder (настроенный на сервере политики -> я не могу его изменить) находится вне контекста моих приложений.Например.если URL моего веб-приложения https://localhost:8080/sm/MyWebApp, то URL-адрес выхода из системы https://localhost:8080/anotherwebapp/logout.html.
Это текущий локальный код выхода из системы:
public void logout() {
System.out.println("Logging out...");
HttpServletRequest request = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
try {
request.logout();
} catch (ServletException e) {
e.printStackTrace();
}
HttpSession session = (HttpSession)FacesContext.getCurrentInstance().getExternalContext().getSession(false);
if (session != null) {
session.invalidate();
}
}
А вот свойство, которое создаетURL выхода из системы:
public String getLogoutUrl() {
HttpServletRequest request = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
String requestServer = request.getServerName();
String requestScheme = request.getScheme();
int serverPort = request.getServerPort();
String logoutUrl = requestScheme + "://" + requestServer + ":" + Integer.toString(serverPort) + "/anotherwebapp/logout.html";
return logoutUrl;
}
Однако я не могу найти компонент JSF2 / Primefaces, который может вызвать logout (), а затем открыть внешний URL.Например, если у меня есть:
<h:outputLink value="#{authBean.logoutUrl}" onclick="#{authBean.logout()}">[Logout]</h:outputLink>
, тогда onclick, кажется, не вызывается.
Другой способ, которым я пытался, - поместить внешний URL в конец функции выхода из системы, чтобы он былвозвращается как строка навигации, но она не распознается (также пробуется с помощью «?face-redirect = true» ...).
Любая помощь приветствуется.