2013-01-10 244 views
0

兩個問題:春季安全與JSF

問題1:

我有我的applicaitonContext-security.xml文件中的以下內容:

<security:http auto-config="true" access-denied-page="/denied.jsf" servlet-api-provision="false"> 
    <security:intercept-url pattern="/denied.jsf" filters="none" />  
    <security:intercept-url pattern="/login.jsf" filters="none" /> 
    <security:intercept-url pattern="/redirect.html" filters="none" /> 
    <security:intercept-url pattern="/images/**" filters="none" />  
    <security:intercept-url pattern="/a4j_resource/**" filters="none" />   
    <security:intercept-url pattern="/**" access="IS_AUTHENTICATED_FULLY" /> 
    <security:form-login login-page="/login.jsf" authentication-failure-url="/login.jsf" default-target-url="/redirect.html" />  
    <security:logout /> 
</security:http> 

,但是當我去http://localhost:8080/summary/projects.jsf我不t重定向到login.jsf頁面。有任何想法嗎。

問題2:projects.xhtml的網頁我有

<rich:comboBox value="#{projectUiService.coordinatorSelected}" directInputSuggestions="true" defaultLabel="Enter Co-ordinator" > 

getCoordinatorSelected方法我有@RolesAllowed("READ_PROJECT"),但我得到的是錯誤:

AuthenticationCredentialsNotFoundException: An Authentication object was not found in the SecurityContext 

我如何讓Spring在用戶未登錄時重定向到登錄頁面,如果用戶沒有正確的權限,如何將其重定向到denied.jsf頁面?

我已經四處尋找了最後6小時,並試圖加載日誌,但找不到解決方案。任何指針將不勝感激。

感謝

回答

0

您需要通過單獨

<security:http pattern="/denied.jsf" security="none" /> 

標籤,以取代所有的

<security:intercept-url pattern="/denied.jsf" filters="none" /> 

結構。一個攔截的URL與過濾器= 「無」 will deactivate all your http config element

第二個選項:

<security:intercept-url pattern="/denied.jsf" access="IS_AUTHENTICATED_ANONYMOUSLY" /> 
+0

''不能作爲父''標記的子元素。 –

+0

是的。您需要多個頂級標記。 –

+0

解決了!請參閱下面的答案以獲得完整的解釋。謝謝Maksym。 –

0

解決了! @ [Maksym Demidas]是正確的。繼承了使用Spring 2.5中和3的組合整理出所有依賴於春季3和更新的安全XML文件的應用程序:

.... 
<security:http pattern="/denied.jsf" security="none"/> 
<security:http pattern="/login.jsf" security="none"/> 
.... 
<security:http auto-config="true" access-denied-page="/denied.jsf" servlet-api-provision="false"> 
    <security:intercept-url pattern="/login.jsf" access="IS_AUTHENTICATED_ANONYMOUSLY" /> 
    <security:intercept-url pattern="/**" access="IS_AUTHENTICATED_FULLY" /> 
    <security:form-login login-page="/login.jsf" authentication-failure-url="/login.jsf" default-target-url="/redirect.html" /> 
    <security:logout /> 
</security:http> 

現在一切工作正常。