우리는 JBoss 7.1, MySQL/PostgreSQL DB, JSF 2.0과 CDI 빈을 사용하고 있습니다.PhaseListener에서 @Named 빈에 액세스하는 방법은 무엇입니까?
로그인 및 비밀번호로 DB를 기반으로 인증을 구현해야합니다. 우리에게는 관리 (관리) 포털이 있습니다. 클라이언트가 로그인하지 않고 제한된 페이지를 열면 클라이언트가 로그인하지 않은 경우 해당 페이지를 login.*
페이지로 리디렉션해야합니다. PhaseListener
을 사용하여이 작업을 시도했습니다. 로그인하고 로그 아웃 할 수 있지만 다른 페이지를 열려고하면 문제가 발생했습니다 : PhaseListener
클래스 안에 @Named("user") public class UserManager
콩을 가져올 수 없습니다. 나는 FacesContext
, & EL ...을 사용하여 그것을 얻으려고 노력했다, 그 모두는 나를 도와주지 않았다.
UserManager
은 로그인의 유효성을 검사하고 로그인 한 사용자를 current
속성으로 저장합니다. 모든 요청에 대해 에 #{user.current}
이 아닌 경우 null
이 아닌지 확인하고 싶습니다. 하지만 PhaseListener
에 #{user}
콩을 가져올 수 없습니다.
@Named
콩을 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;
}
}
* "FacesContext, EL ...을 사용하여 얻으려고했는데 모두 도움이되지 못했습니다"* – BalusC
위의 스 니펫을 추가했습니다. SessionPhaseListener에서 빈을 얻으십시오 – AnNik