Мы используем JBoss 7.1, MySQL / PostgreSQL DB, JSF 2.0 с компонентами CDI.
Мне нужно реализовать аутентификацию на базе БД по логину и паролю. У нас есть портал управления (администрирования). Когда клиент открывает страницу с ограниченным доступом без входа в систему, он должен перенаправить запрос на страницу login.*
, если клиент не вошел в систему.
Я пытался сделать это с помощью PhaseListener
. Я могу войти и выйти, но когда я пытаюсь открыть другую страницу, я столкнулся с проблемой: я не могу получить компонент @Named("user") public class UserManager
внутри класса PhaseListener
. Я пытался получить это с помощью FacesContext
, & EL ..., но все это мне не помогло.
UserManager
проверяет логин и сохраняет вошедшего в систему пользователя как свойство current
. По каждому запросу я хочу проверять PhaseListener
, если #{user.current}
не null
. Но я не могу получить компонент #{user}
в PhaseListener
.
Как я могу получить @Named
bean в beforePhase()
или afterPhase()
?
Обновление: вот моя попытка:
private boolean loggedIn( FacesContext context ) throws IOException, ServletException
{
LOGSTORE.debug( "loggedIn().2 " );
HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest();
HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();
// ELContext elContext = FacesContext.getCurrentInstance().getELContext();
// UserManager userManager = (UserManager) FacesContext.getCurrentInstance().getApplication()
// .getELResolver().getValue( elContext, null, "user" );
HttpSession session = (HttpSession) context.getExternalContext().getSession( true );
UserManager userManager = (UserManager) session.getAttribute( "user" );
// UserManager userManager = (UserManager) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get( "user" );
if (!StringUtils.contains( ((HttpServletRequest) context.getExternalContext().getRequest())
.getRequestURL().toString(), URL_SESSION_EXPIRED ))
{
if (userManager == null || !userManager.isLoggedIn())
{
LOGSTORE.debug( " userManager is " + (userManager == null ? "" : "not ") + " null" );
if (userManager != null)
{
LOGSTORE.debug( " userManager.isLoggedIn() is "
+ (userManager.isLoggedIn() ? "TRUE" : "FALSE") );
}
LOGSTORE.debug( " doPhaseFilter() - START REDIRECT " );
response.sendRedirect( request.getContextPath() + "/" + homepage + "?auth-failed" );
}
return false;
} else
{
LOGSTORE.debug( "loggedIn().3 it is " + homepage );
return true;
}
}