2014-03-30 3 views
0

웹 응용 프로그램에서 omnifaces extensionless URL을 사용하고 있습니다. omnifaces 무한 URL과 함께 사용할 때 필터가 작동하지 않습니다.

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"> 
<context-param> 
    <param-name>javax.faces.PROJECT_STAGE</param-name> 
    <param-value>Development</param-value> 
</context-param> 
<servlet> 
    <servlet-name>Faces Servlet</servlet-name> 
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>*.xhtml</url-pattern> 
</servlet-mapping> 
<context-param> 
    <param-name>org.omnifaces.FACES_VIEWS_SCAN_PATHS</param-name> 
    <param-value>/*.xhtml</param-value> 
</context-param> 
<session-config> 
    <session-timeout> 
     30 
    </session-timeout> 
</session-config> 
<welcome-file-list> 
    <welcome-file>Login.xhtml</welcome-file> 
</welcome-file-list> 
</web-app> 

내 필터 제공자 라이선스 계약

아래로입니다 아래와 같이

내 web.xml 파일은

@WebFilter(filterName = "AuthFilter", urlPatterns = { "*.xhtml" }) 
public class AuthenticationFilter implements Filter { 
@Override 
public void doFilter(ServletRequest request, ServletResponse response, 
     FilterChain chain) throws IOException, ServletException { 
    try { 
     HttpServletRequest req = (HttpServletRequest) request; 
     HttpServletResponse res = (HttpServletResponse) response; 
     HttpSession ses = req.getSession(false); 
     String reqURI = req.getRequestURI(); 
        System.out.println(reqURI); 
     if (reqURI.indexOf("/Login") >= 0 
       || (ses != null && ses.getAttribute("user") != null) 
       || (reqURI.indexOf("/ForgotPassword") >=0) 
       || reqURI.contains("javax.faces.resource")) { 
      if ((reqURI.indexOf("/Login") >= 0 || (reqURI.indexOf("/ForgotPassword") >=0)) 
        && (ses != null && ses.getAttribute("user") != null)) { 
           System.out.println("Invalidating session"); 
       ses.invalidate(); 
      } 
      chain.doFilter(request, response); 
     } else { 
      res.sendRedirect(req.getContextPath() + "/Login"); 
     } 
    } catch (Throwable t) { 
     System.out.println(t.getMessage()); 
    } 
} // doFilter 
} 

내 요구 사항은 사용자가 로그인되어있는 경우를 제외하고 모든 페이지에 그를 리디렉션이다 로그인 및 비밀번호 잊어 버리기 페이지. 사용자가 로그인하여 해당 페이지 중 하나에 액세스하려고 시도하면 그를 로그 아웃하고 요청한 페이지로 보냅니다. 사용자가 로그인하지 않은 경우 로그인 및 ForgotPassword 페이지에 대한 모든 요청이 허용되어야하며 다른 페이지에 액세스하면 로그인 페이지로 리디렉션되어야합니다.

내가 직면 한 문제는 확장없는 URL을 사용하면 .xhtml 파일 확장명을 포함하거나 포함하지 않는 페이지에 액세스 할 수 있다는 것입니다. 필터는 확장 프로그램을 사용하여 액세스 할 때만 호출됩니다. 확장자가 없으면 필터가 바이 패스됩니다.

모든 요청을 처리하기 위해 필터 클래스에 제공 할 URL 패턴을 모르겠습니다.

친절히 도움. FacesServlet에 첨부,

@WebFilter(urlPatterns = "/*") 

또는 :

답변

1

하나, 모든 URL에서 수신

@WebFilter(servletNames = "Faces Servlet") 

(이 방법으로 필터가 이렇게 실행하지 않습니다 때 URL 아무튼 'FacesServlet 명중)

+0

첫 번째 패턴이 효과가있었습니다. 고맙습니다 . – Adarsh