2010-06-30 3 views
1

JSF, Facelets, Richfaces가있는 Java EE에 동적 웹 응용 프로그램이 있습니다. 내 페이지는 모두 xhtml 페이지입니다. 그래서 JSTL이 작동하지 않습니다. 내 계정 페이지와 다른 모든 개인 페이지에 연결할 수 있도록 사용자가 연결되어 있는지 테스트하고 싶습니다. 따라서 HttpSession의 속성 세션이 null이 아닌 경우 테스트해야합니다. null 인 경우 환영 페이지에서 사용자가 리디렉션됩니다. Xhtml 페이지 및 HttpSession 테스트, 아니 jstl?

나는 나의 XHTML 페이지에서 재판 :

<jstl:if test="${sessionScope['session']==null}"> 
<jstl redirect...> 
</jstl:if>--> 

을하지만 JSP 페이지가 아니라 그것을 작동하지 않습니다. 그렇다면 사용자가 비공개 페이지를 볼 수 있도록 세션이 null이 아닌지 테스트해야합니까? 중앙 관리 빈에 ?

답변

3

정상적인 장소는 Filter입니다.

클래스 implementsjavax.servlet.Filter를 만들고 doFilter() 방법으로 다음과 같은 논리를 작성 : 등,

if (((HttpServletRequest) request).getSession().getAttribute("user") == null) { 
    // Not logged in, so redirect request to login page. 
    ((HttpServletResponse) response).sendRedirect("/login.jsf"); 
} else { 
    // Logged in, so just continue request. 
    chain.doFilter(request, response); 
} 

지도 /private/* 같은, /secured/*, /restricted/*url-patternweb.xml에서이 필터

<filter> 
    <filter-name>loginFilter</filter-name> 
    <filter-class>com.example.LoginFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>loginFilter</filter-name> 
    <url-pattern>/private/*</url-pattern> 
</filter-mapping> 

/private 폴더에 개인 페이지가있는 경우이 필터가 호출됩니다. 이에 따라 세션에서 로그인 한 사용자의 존재를 처리 할 수 ​​있습니다.

속성 이름이 session에서 user으로 바뀌 었음에 주목하십시오. HttpSession 자체는 이미 세션입니다. 다른 개발자가 코드를 확인/유지하는 것은 너무 모호하고 혼란 스럽습니다.

+0

우리가 각 개인 페이지에서 할 제안했습니다 ... 대단히 감사합니다 : 하지만 어쨌든 당신의 방법을 선호하고, 유지하기 쉽고 더 일반적입니다. 고맙습니다. – KitAndKat