2015-01-04 120 views
2

我試圖使用spring安全性來過濾URL。以下是用於濾波的定義: 「{)新的java.io.File( 'FILE_PATH')存在(}#」SPEL表達式未動態評估

<截距-URL模式= 「/網頁」 訪問=/>

根據名爲file_path的文件的存在來限制URL。

如果在加載spring配置文件時存在file_path,則會提供訪問權限。如果file_path是在加載後創建的,則不提供訪問。我希望表達式不僅在編譯表達式時每次對/頁面的請求做出&的評估。

試圖設置系統屬性-Dspring.expression.compiler.mode = MIXED但沒有效果。

有人能幫我嗎?

回答

3

這是正確的,因爲您使用configuration time表達式(#{...})。要達到要求,你應該使用類似這樣的東西:

<http use-expressions="true"> 
    <intercept-url pattern="/admin*" 
      access="hasRole('admin') and hasIpAddress('192.168.1.0/24')"/> 
</http> 

請參閱Expression-Based Access Control。所以,在你的情況下,它可以是這樣的:

<http use-expressions="true"> 
    <intercept-url pattern="/page" access="new java.io.File('file_path').exists()"/> 
</http> 
+0

謝謝Artem!它爲我節省了很多時間...... – user3911119 2015-01-04 12:24:47