2010-06-01 47 views
4

我有一個應用程序,我在使用spring安全和grails旋律。我計劃在生產環境中運行Grails旋律,但不希望訪問者訪問它。我應該如何實現這一目標?我試圖在Grails的創建過濾器(只是顯示的什麼,我想,而不是實際的代碼示例) -使用grails過濾器保護grails旋律

def filters = { 
    allURIs(uri:'/**') { 
     before = { 
      //... 
      if(request.forwardURI.indexOf("admin") != -1 || 
     request.forwardURI.indexOf("monitoring") != -1) { 
       response.sendError 404 
       return false 
      } 
     } 
    } 
} 

但是,這並不工作,作爲「監視」犯規打這個過濾器的請求。我甚至不希望用戶知道這樣的URL存在,所以我想檢查過濾器,如果「監測」是URL,我顯示404錯誤頁面。這也是爲什麼我不想用Spring安全保護這個URL的原因,因爲它會顯示「訪問被拒絕」頁面。

基本上我希望URL存在,但它們應該對用戶不可見。我希望訪問權限僅針對這些特殊網址的某些IP地址開放。

另一個說明,是否有可能編寫一個grails過濾器,在彈簧安全過濾器被擊中之前「起作用」?我希望能夠在將請求轉發到安全性之前進行一些篩選。編寫像上面的grails過濾器不會有幫助。如果我訪問一個受保護的資源並且這個過濾器沒有被調用,Spring安全過濾器首先被命中。

感謝

回答

4

Grails的過濾器的Spring攔截器的包裝,所以他們在「真實」的Servlet過濾器像Spring Security中用到火。如果你想在Spring Security之前發佈一些東西,你需要在web.xml中註冊一個過濾器,或者在插件的過濾器鏈中註冊一個過濾器。

這是IP地址過濾器的動機之一。我們想要一個可用於登錄管理員的管理員部分,但只有在從LAN或VPN訪問時纔可用。 LAN和VPN的IP地址,一切都開始於10,所以我們增加了一個規則

'/admin/**': '10.**' 

過濾器發送一個404響應隱藏資源的存在。

請參閱http://burtbeckwith.github.com/grails-spring-security-core/docs/manual/guide/10.%20Extending%20and%20configuring%20the%20plugin.html#10.8.%20IP%20Address%20Restrictions瞭解相關文檔。

+0

Thanks Burt!我會去「真正的」過濾器解決方案。 – batmannavneet 2010-06-02 19:54:01

+0

現在看來您應該看到: http://burtbeckwith.github.com/grails-spring-security-core/docs/manual/guide/18%20IP%20Address%20Restrictions.html – evernat 2010-10-07 20:49:17

0

下面是我在類似場景中所做的(JavaMelody 1.29.0和Spring Security 3.0.5)。我想限制管理員用戶訪問Melody報告。

春季安全配置:

<http auto-config="true" use-expressions="true"> 
    ... 
    <intercept-url pattern="/monitoring/**" access="hasRole('ROLE_ADMIN')" /> 
    ... 
</http> 

的web.xml配置:

<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> 
</filter-mapping> 

<filter> 
    <filter-name>monitoring</filter-name> 
    <filter-class>net.bull.javamelody.MonitoringFilter</filter-class> 
</filter> 

<filter-mapping> 
    <filter-name>monitoring</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

關鍵的一點是要確保,即監測,過濾器 Spring Security的過濾器鏈之後定義

1

我一直在尋找使用Spring Security來確保Grails Melody(例如/監視)。我現在使用Apache HTTP Basic身份驗證(我們使用apache代理到tomcat),但這並不理想,因爲我正在尋找將應用程序部署到CloudFoundry。

例如,這可以很容易地使用Grails WebXmlConfig插件來完成嗎?我看到伯特對文檔頁面做出了貢獻 - 至少 - 我不確定插件是不是真的有文檔記錄...