Чтобы прояснить ситуацию:
Мы используем единый вход, поэтому страница входа больше не требуется, и имя пользователя / роль уже доступны. Теперь пользователь с ролью beer хочет получить доступ к странице beer, а пользователь с ролью loudFart хочет получить доступ к странице loudFart - при первом входе в приложение
public class DebugPhaseListener implements PhaseListener {
public void beforePhase(PhaseEvent event) {
String path=FacesContext.getCurrentInstance().getExternalContext().getRequestServletPath();
if("/index.jsf".equals(path)) {
FacesContext fc = FacesContext.getCurrentInstance();
String toOutcome = (UserSession) context.getExternalContext().getSessionMap().get("userSession").getWelcomePage();
System.out.println("redirecting "+ toOutcome);
fc.getApplication().getNavigationHandler().handleNavigation(fc, null,toOutcome);
}
}
public void afterPhase(PhaseEvent event) {
}
public PhaseId getPhaseId() {
return PhaseId.RESTORE_VIEW;
}
}
Печальная реальность такова, что весна не запускает никаких бобов для страницы приветствия
19:19:59,828 INFO [STDOUT] RESTORE_VIEW 1 <--- before phase //this is true even for render response phase
19:19:59,830 WARN [lifecycle] phase(RESTORE_VIEW 1,com.sun.faces.context.FacesContextImpl@197cf78) threw exception: java.lang.NullPointerException null
jp.funny.something.util.DebugPhaseListener.beforePhase(DebugPhaseListener.java:25)
com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:222)
После первого вызова с нулевым указателем, пользовательская сессия существует, и она снова работает :-), но это все еще отстой
Между прочим, это находится на JBoss 4.2.2, и я попробовал оба метода org.springframework.web.context.ContextLoaderListener и
org.springframework.web.context.ContextLoaderServlet
Есть ли другой способ сделать это? Различные конфигурации, чтобы попробовать?
Спасибо, ребята