2012-07-31 44 views
0

我有一個運行Apache Tomcat的服務器端應用程序,並使用Spring開發。我需要阻止一些用戶訪問本地網絡之外的應用程序。 我一直在尋找一段時間,但我找不到解決這個問題的方法。 Spring是否提供了基於他的權限限制用戶內部/外部訪問的功能?如何檢查客戶端是否是Java本地的

回答

0

是的,你可以使用當XML表達

link: 15.2 Web Security Expressions

+0

看起來像一個很好的解決方案,但由於我使用的是標準的安全符號,這將是表情符號的複雜變化。 我知道,我可以聲明WebSecurityExpressionRoot作爲一個bean,但我不知道我應該在構造函數中使用的參數。 – Porto2112 2012-07-31 14:16:28

3

Servlet規範允許您查看遠程IP地址,ServletRequest#getRemoteAddr()。限制IP地址訪問的傳統方式是使用servlet過濾器將IP地址範圍列入白名單或黑名單。您可以搜索可以添加到您的Spring應用程序的servlet過濾器實現。你只需要配置它。但是...確保您的選擇爲以下實施帳戶的實施。如果你找不到解釋這一點的人,可以考慮自己寫。

主要的一點要注意的是,您的服務器所看到的「遠程地址」是不能保證在所有來識別客戶機。這是一個網絡問題,而不是Spring/servlet問題。您的服務器看到的遠程地址,甚至可能是您自己的內部網絡上的負載平衡器或其他網絡設備的IP。

閱讀關於HTTP標頭X-Forwarded-For。如果內部網絡中的某個配置中的反向代理或負載均衡器在TCP/IP堆棧中的應用層(例如HTTP)上轉發請求,並且因此更改了服務器看到的源IP,則對於HTTP該設備通常會將原始IP包含或添加到此標頭。其實這個頭可以包含原始IP地址的列表,在該請求通過幾個的NAT或代理的起源組織或途中在互聯網上達到自己的網絡之前通過的情況。

我會推薦保守的白名單允許地址,而不是黑名單上的禁止地址。如果您的網絡體系結構發生了變化,這可能會更加健壯,但是如果在內部網絡上重新分配IP,您仍然需要小心。

你的Servlet過濾器可以使用的ServletRequest#getRemoteAddr()組合和解析X-Forwarded-For頭。

還記得在您的設計和白名單或黑名單中包含任何IPv6地址。

+0

我會看看這個想法,謝謝。 – Porto2112 2012-07-31 14:22:12

相關問題