웹 사이트에서 말했듯이 콩은 내 .xhtml
에 대한 호출이있을 때만 실행됩니다.EL 표현식을 사용하지 않고 콩 메서드를 제공하는 방법
EL 표현식없이 빈을 호출 할 수 있습니까?
내 HomeController
이 세션 상태를 확인하고 내 home.xhtml
에있는 메소드를 호출하고 있으며이 콩을 가을에 사용할 필요가 없기 때문에 필요합니다.
웹 사이트에서 말했듯이 콩은 내 .xhtml
에 대한 호출이있을 때만 실행됩니다.EL 표현식을 사용하지 않고 콩 메서드를 제공하는 방법
EL 표현식없이 빈을 호출 할 수 있습니까?
내 HomeController
이 세션 상태를 확인하고 내 home.xhtml
에있는 메소드를 호출하고 있으며이 콩을 가을에 사용할 필요가 없기 때문에 필요합니다.
다른 방향으로 솔루션을 찾아야합니다.
컨테이너 관리 인증 대신 사용자 인증을 사용하는 경우 일반적으로 사용자가 로그인했는지 여부를 확인하기 위해 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())) {
// ...
}
당신은 그것을 호출 할 수 있습니다 다음
login.xhtml
가이 URL 패턴이 적용되어 당신이 정말로 그것을 변경할 수없는 경우 다음과 같이는
업데이트, 다음
if
블록을 변경 다른 빈에서 또는 단계 청취자 또는 다른 곳에서 가져올 수 있습니다. 질문을 명확히 할 수 있습니까? –나는 그것을 편집했다, 자세한 정보가 필요하면 참조하십시오. – Gerep