2012-05-15 66 views
1

我有我的攔截URL的配置一樣的Spring Security 3.1攔截的URL

<security:http use-expressions="true" disable-url-rewriting="true"> 

    <security:intercept-url pattern="/secure/admission/*" access="hasRole('ROLE_ADMISSIONER')" />    
    <security:intercept-url pattern="/secure/subdean/*" access="hasRole('ROLE_SUBDEAN')" /> 
    <security:intercept-url pattern="/secure/referent/*" access="hasRole('ROLE_REFERENT')" />     
    <security:intercept-url pattern="/secure/index.xhtml" access="hasRole('ROLE_REFERENT, ROLE_SUBDEAN')" />  
    <security:intercept-url pattern="/secure/*" access="hasRole('ROLE_OMNI_ADMIN')" /> 
    <security:intercept-url pattern="/**" access="isAuthenticated()" /> 

但現在我有一個問題,它是可能的存取權限我的應用程序的URL,例如my_application之/ PririzMaven /安全/管理/帶有角色ROLE_ADMISSIONER的updateRole.xhtml,url ..../secure/subdean/*具有相同的角色,等等......但它應該被禁止給這個用戶。

你知道哪裏可能是一個問題嗎?

回答

5

假設PririzMaven是應用程序的上下文路徑,/secure/admin/updateRole.xhtml將與路徑/**相匹配,因此所有經過身份驗證的用戶都可以訪問該路徑。您沒有/secure/admin的規則。還要注意,一個'*'與子路徑不匹配。例如,您應該使用/secure/admin/**來匹配此路徑下的所有內容。

您還應該啓用調試日誌記錄,並檢查規則的應用方式 - 您應該看到針對傳入請求URL調用的匹配器,並將看到正在比較的內容和正在匹配的內容。

最後,值得在應用程序上下文文件的頂部添加<security:debug />,它將以更易於理解的格式在請求處理中添加其他有用的調試信息。