2013-05-29 25 views
0
  1. 我在我的應用程序中使用JSF(Primefaces),Spring,Spring Security,MyBatis和PrettyFaces。
  2. 我有一個URL沒有被PrettyFaces映射。
  3. 此URL重定向到XHTML頁面。 XHTML頁面與Spring Security映射,並與我的應用程序的角色關聯
  4. 在XHTML頁面中,我調用了一個Authentication對象。此對象存儲用戶在我的應用程序中記錄了 。
  5. 當我進入到URL ocurrs一個例外,因爲Authentication對象爲空
  6. 但當我映射的URL,存儲Authentication對象返回值用戶。

發生了什麼事?當URL未被映射到PrettyFaces時,身份驗證(Spring Security)對象爲空

這是我的日誌web應用:

40094 [http-8080-6] TRACE com.ocpsoft.pretty.PrettyContext - Initialized PrettyContext 
40094 [http-8080-6] TRACE com.ocpsoft.pretty.PrettyContext - Initialized PrettyContext 
40094 [http-8080-6] TRACE com.ocpsoft.pretty.PrettyFilter - Request is not mapped using PrettyFaces. Continue. 
40094 [http-8080-6] TRACE com.ocpsoft.pretty.PrettyContext - Initialized PrettyContext 
40094 [http-8080-6] TRACE com.ocpsoft.pretty.PrettyContext - PrettyContext not found in Request - building new instance 
40094 [http-8080-6] DEBUG org.springframework.faces.support.RequestLoggingPhaseListener - Entering JSF Phase: RESTORE_VIEW 1 
40141 [http-8080-6] TRACE com.ocpsoft.pretty.PrettyContext - Retrieved PrettyContext from Request 
40141 [http-8080-6] TRACE com.ocpsoft.pretty.faces.beans.ParameterInjector - Validating parameters. 
40141 [http-8080-6] TRACE com.ocpsoft.pretty.PrettyContext - Retrieved PrettyContext from Request 
40141 [http-8080-6] TRACE com.ocpsoft.pretty.faces.beans.ParameterInjector - Injecting parameters 
40141 [http-8080-6] TRACE com.ocpsoft.pretty.PrettyContext - Retrieved PrettyContext from Request 
40141 [http-8080-6] TRACE com.ocpsoft.pretty.PrettyContext - Retrieved PrettyContext from Request 
40141 [http-8080-6] INFO com.indra.siguip.view.exceptions.SiguipExceptionHandler - Entrando al manejador de Excepciones del JSF 
40141 [http-8080-6] TRACE com.ocpsoft.pretty.PrettyContext - Retrieved PrettyContext from Request 
40141 [http-8080-6] DEBUG org.springframework.faces.support.RequestLoggingPhaseListener - Entering JSF Phase: APPLY_REQUEST_VALUES 2 
40141 [http-8080-6] INFO com.indra.siguip.view.exceptions.SiguipExceptionHandler - Entrando al manejador de Excepciones del JSF 
40141 [http-8080-6] TRACE com.ocpsoft.pretty.PrettyContext - Retrieved PrettyContext from Request 
40141 [http-8080-6] DEBUG org.springframework.faces.support.RequestLoggingPhaseListener - Entering JSF Phase: PROCESS_VALIDATIONS 3 
40141 [http-8080-6] TRACE org.springframework.web.jsf.el.SpringBeanFacesELResolver - Successfully resolved variable 'applicationConfig' in Spring BeanFactory 
40141 [http-8080-6] TRACE org.springframework.web.jsf.el.SpringBeanFacesELResolver - Successfully resolved variable 'menuGeneratorService' in Spring BeanFactory 
28/05/2013 07:54:00 PM com.sun.faces.lifecycle.ProcessValidationsPhase execute 
ADVERTENCIA: Se ha producido un error al realizar la inyección de recurso en el bean administrado menuController 
com.sun.faces.mgbean.ManagedBeanCreationException: Se ha producido un error al realizar la inyección de recurso en el bean administrado menuController 
    at com.sun.faces.mgbean.BeanBuilder.invokePostConstruct(BeanBuilder.java:229) 

這是我的春天Securiy的配置和PretyFaces

<filter> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
    </filter> 
    <filter-mapping> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <url-pattern>/*</url-pattern> 
    <dispatcher>FORWARD</dispatcher> 
    </filter-mapping> 
    <filter> 
    <filter-name>Pretty Filter</filter-name> 
    <filter-class>com.ocpsoft.pretty.PrettyFilter</filter-class> 
    </filter> 
    <filter-mapping> 
    <filter-name>Pretty Filter</filter-name> 
    <url-pattern>/*</url-pattern> 
    <dispatcher>FORWARD</dispatcher> 
    <dispatcher>REQUEST</dispatcher> 
    <dispatcher>ERROR</dispatcher> 
    </filter-mapping> 

PD:我改變話題更明確

回答

1

您只配置了春季安全過濾器來處理請求轉發,還需要處理其他類型:

<filter> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <url-pattern>/*</url-pattern> 
    <dispatcher>FORWARD</dispatcher> 
    <dispatcher>REQUEST</dispatcher> 
    <dispatcher>INCLUDE</dispatcher> 
    <dispatcher>ERROR</dispatcher> 
</filter-mapping> 

PrettyFaces如果它不是由框架來處理,因此不轉發請求,調度類型保持爲REQUEST,並且Spring Security過濾器從不執行。

+0

看來,這是工作:) –

0

無,當使用PrettyFaces時,你絕對不必映射每個URL。如果傳入的請求不匹配任何映射,它只會被轉發到應用程序,PrettyFaces不會對它做任何事情。

所以你的異常是由別的東西引起的。如果您發佈完整的堆棧跟蹤沒有本地化的錯誤消息,我可以看看它。

+0

我編輯了我的問題 –

+0

springSecurityFilterChain被配置爲只適用於FORWARDED請求(就像PrettyFaces創建的請求一樣)。您應該全部請求過濾器,以便它也得到正常請求的調用。 – chkal

相關問題