2011-11-02 25 views
2

創建過濾器,它工作正常,但我的RichFaces不能正常工作了,這是我的web.xml:Web過濾器阻塞RichFaces的

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
    id="WebApp_ID" version="3.0"> 
    <display-name>SuaParte</display-name> 
    <welcome-file-list> 
     <welcome-file>index.xhtml</welcome-file> 
    </welcome-file-list> 

    <context-param> 
     <param-name>javax.faces.PROJECT_STAGE</param-name> 
     <param-value>Development</param-value> 
    </context-param> 

    <context-param> 
     <param-name>javax.faces.STATE_SAVING_METHOD</param-name> 
     <param-value>server</param-value> 
    </context-param> 

    <context-param> 
     <param-name>org.richfaces.SKIN</param-name> 
     <param-value>blueSky</param-value> 
    </context-param> 

    <context-param> 
     <param-name>org.richfaces.CONTROL_SKINNING</param-name> 
     <param-value>enable</param-value> 
    </context-param> 

    <filter> 
     <display-name>RichFaces Filter</display-name> 
     <filter-name>richfaces</filter-name> 
     <filter-class>org.ajax4jsf.Filter</filter-class> 
    </filter> 

    <filter-mapping> 
     <filter-name>richfaces</filter-name> 
     <servlet-name>Faces Servlet</servlet-name> 
     <dispatcher>REQUEST</dispatcher> 
     <dispatcher>FORWARD</dispatcher> 
     <dispatcher>INCLUDE</dispatcher> 
    </filter-mapping> 

    <context-param> 
     <param-name>com.sun.faces.disableVersionTracking</param-name> 
     <param-value>true</param-value> 
    </context-param> 

    <context-param> 
     <param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name> 
     <param-value>true</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> 

    <filter> 
     <filter-name>LoginFilter</filter-name> 
     <filter-class>filter.LoginFilter</filter-class> 
    </filter> 
    <filter-mapping> 
     <filter-name>LoginFilter</filter-name> 
     <servlet-name>Faces Servlet</servlet-name> 
    </filter-mapping> 
</web-app> 

我也嘗試了@BalusC建議here,改變的web.xml於:

<filter> 
    <filter-name>LoginFilter</filter-name> 
    <filter-class>filter.LoginFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>LoginFilter</filter-name> 
    <url-pattern>/secured/*</url-pattern> 
</filter-mapping> 

而* .xhtml文件更改爲secured文件夾:

enter image description here

但是,這種方式過濾器不工作了。

如何使richfaces與我的過濾器一起工作?

回答

4

RichFaces資源也通過FacesServlet,因此也通過您的安全過濾器。您需要添加額外的if檢查以繞過資源請求(請參閱<h:outputStylesheet>,<h:outputScript>,<h:graphicImage>等完成的CSS/JS /圖像請求,或者在標記中顯式聲明或由JSF/RichFaces隱式添加)。

String uri = ((HttpServletRequest) request).getRequestURI(); 

// Ignore JSF2/RF4 resources (which are also mapped on FacesServlet). 
if (uri.startsWith(ResourceHandler.RESOURCE_IDENTIFIER) || uri.startsWith(ResourceHandlerImpl.RICHFACES_RESOURCE_IDENTIFIER)) { 
    chain.doFilter(request, response); 
    return; 
} 

// ... 

import javax.faces.application.ResourceHandler; 
import org.richfaces.resource.ResourceHandlerImpl; 

至於爲什麼你/secured/*映射不工作是因爲你在你的文件夾結構已經一個額外的/pages路徑存在。然後過濾器應映射到/pages/secured/*

+0

thaks再次隊友,它只是必要的改變'/ secured /'到'/頁/安全',我認爲這是因爲我已經聲明richfaces過濾器,只是一個猜測。 謝謝@BalusC。 –

+0

不客氣。 – BalusC