2012-04-27 2 views
0

웹 사이트에서 말했듯이 콩은 내 .xhtml에 대한 호출이있을 때만 실행됩니다.EL 표현식을 사용하지 않고 콩 메서드를 제공하는 방법

EL 표현식없이 빈을 호출 할 수 있습니까?

HomeController이 세션 상태를 확인하고 내 home.xhtml에있는 메소드를 호출하고 있으며이 콩을 가을에 사용할 필요가 없기 때문에 필요합니다.

+0

당신은 그것을 호출 할 수 있습니다 다음 login.xhtml가이 URL 패턴이 적용되어 당신이 정말로 그것을 변경할 수없는 경우 다음과 같이

@WebFilter("/app/*") public class LoginFilter implements Filter { // ... } 

업데이트, 다음 if 블록을 변경 다른 빈에서 또는 단계 청취자 또는 다른 곳에서 가져올 수 있습니다. 질문을 명확히 할 수 있습니까? –

+0

나는 그것을 편집했다, 자세한 정보가 필요하면 참조하십시오. – Gerep

답변

2

다른 방향으로 솔루션을 찾아야합니다.

컨테이너 관리 인증 대신 사용자 인증을 사용하는 경우 일반적으로 사용자가 로그인했는지 여부를 확인하기 위해 servlet filter을 사용합니다.

서블릿 필터는 서블릿 (예 : FacesServlet)이 특정 URL 패턴에 매핑 될 수 있습니다. 그런 다음 해당 URL 패턴과 일치하는 모든 요청에서 호출됩니다. 필터의 요청/세션 데이터를 탐색 한 다음 필터 체인을 계속 유지하거나 리디렉션을 보내 요청/응답을 적절하게 처리 할 수 ​​있습니다.

따라서 javax.servlet.Filter 인터페이스를 구현해야합니다. 다음은 @SessionScoped 관리 대상 LoginController을 가정하고 doFilter() 메소드를 구현하는 방법에 대한 예입니다. JSF는 세션 범위 bean을 HttpSession의 속성으로 저장합니다.

@Override 
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { 
    HttpServletRequest request = (HttpServletRequest) req; 
    HttpServletResponse response = (HttpServletResponse) res; 
    HttpSession session = request.getSession(false); 
    LoginController loginController = (LoginController) (session != null) ? session.getAttribute("loginController") : null; 

    if (loginController == null || !loginController.isLoggedIn()) { 
     response.sendRedirect(request.getContextPath() + "/login.xhtml"); // No logged-in user found, so redirect to login page. 
    } else { 
     chain.doFilter(req, res); // Logged-in user found, so just continue request. 
    } 
} 

제한된 페이지를 다루는 URL 패턴에이 필터를 매핑하십시오. /app/*.

if (!request.getRequestURI().endsWith("/login.xhtml") && (loginController == null || !loginController.isLoggedIn())) { 
    // ... 
} 
+0

이 클래스를 만드는 중 올바른 필터 클래스 5 개가 있습니까? – Gerep

+0

'javax.servlet.Filter'. 답안의 링크를 참조하십시오. – BalusC

+0

예. 그래, 아직도 의심 스럽다. @WebFilter, 뭐하니? – Gerep

관련 문제