我有一個帶EJB模塊和Web應用程序模塊(servlet)的企業應用程序。我使用URLConnection從EJB訪問servlet URL,但希望以一定的安全性保護URL。我不想使用用戶名和密碼進行身份驗證,因爲我無法使用任何單一登錄解決方案,所以我想如果有一種方法可以限制只能從其企業應用程序訪問的URL。請幫忙。在不使用用戶名密碼認證的情況下保護servlet URL
2
A
回答
1
1
可以用來部署你的servlet的應用程序,並使用該用戶保護應用程序的應用程序服務器中創建用戶憑據(例如使用基本身份驗證):
<security-constraint>
<web-resource-collection>
<web-resource-name>
Entire Application
</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>member</role-name>
</auth-constraint>
</security-constraint>
然後,您可以使用您的EJB認證。
3
有很多的信息,你忽略了:
- 只有通過你的EJB模塊使用的小服務程序,或者它也可用於其他客戶端?
- Servlet和EJB模塊是否在同一個容器中運行?同一臺物理機器?
- 您使用的是什麼web服務器/ servlet容器/ J2EE容器?
如果servlet僅由EJB模塊,它們都在同一臺機器上,那麼你可以配置你的Web容器只能從localhost
接受連接,改變你的EJB模塊使用指向的URL在localhost
而不是一個公共域名或IP地址。
如果它們位於不同的機器上,或者您的servlet被其他客戶端使用,那麼您將需要以某種方式驗證EJB模塊。您可以使用SSL客戶端證書(請參閱this question)或配置您的servlet容器以允許來自EJB模塊IP地址的連接。
EDIT
使用Servlet過濾器來控制訪問是相當簡單的。在你的情況下,你想驗證請求來自本地主機。如果沒有,請將未經授權的消息發送回客戶端。
這是應該做的是一個非常簡單的doFilter
方法實現:
public void doFilter(ServletRequest request,
ServletResponse response,
FilterChain chain)
throws ServletException, IOException
{
if (!request.getRemoteAddr().equals("127.0.0.1")) {
HttpServletResponse rsp = (HttpServletResponse) response;
rsp.sendError(HttpServletResponse.SC_FORBIDDEN, "You are not authorized to access this resource.");
}
chain.doFilter(request, response);
}
的東西過濾器添加到您的web.xml
類似如下:
<filter>
<filter-name>AuthorizationFilter</filter-name>
<filter-class>com.foo.bar.AuthorizationFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>AuthorizationFilter</filter-name>
<servlet-name>RestrictedServlet</servlet-name>
</filter-mapping>
過濾器是順序執行的,他們出現在web.xml
中,因此請確保授權過濾器是第一個列出的。
說了這麼多,我在這裏和BalusC一致。如果可能的話,您應該重構代碼,以便EJB模塊直接執行代碼而不是進行servlet調用。
相關問題
- 1. 使用用戶名密碼保護URL
- 2. 在不驗證用戶身份的情況下驗證用戶名和密碼
- 3. 在不詢問用戶名/密碼的情況下授權用戶使用oneDrive
- 4. 如何在不輸入密碼的情況下發送用戶名和密碼?
- 5. SVN認證的用戶名,密碼和URL使用SVN套件
- 6. 如何在不使用驗證碼的情況下保護JSON電話
- 7. 如何在不使用設計確認密碼的情況下更新帳戶?
- 8. PHPSecLib受密碼保護的RSA和用戶認證
- 9. 如何保護用戶名,密碼,api_keys
- 10. 如何在默認情況下爲sql/xampp添加用戶名和密碼?
- 11. 嘗試使用htaccess密碼保護URL
- 12. Oracle - 在不打開其他連接的情況下驗證用戶和密碼?
- 13. 如何密碼保護Excel用戶窗體但允許它在沒有密碼的情況下重新打開?
- 14. 如何在不使用SSL的情況下保護登錄?
- 15. 如何在不使用SSL的情況下保護POST方法?
- 16. 在PowerShell中使用REST API for TFS 2015.2如何在不使用腳本的情況下保護密碼
- 17. CakePHP:在不更改密碼的情況下編輯用戶
- 18. Node.js用戶名和密碼認證
- 19. NetNamedPipeBinding和用戶名/密碼認證
- 20. 用戶名和密碼認證角
- 21. 通過Ajax保護密碼認證
- 22. 在密碼加密的情況下登錄用戶
- 23. 如何在沒有SSL的情況下保護用戶的身份驗證?
- 24. 在不改變密碼的情況下保存Django用戶表單
- 25. 在不知道密碼的情況下解鎖受保護的工作簿
- 26. 在不使用Cookie的情況下維護會話並且不使用URL
- 27. 使用登錄名保護密碼
- 28. 如何在不更改url的情況下調用servlet?
- 29. 在不知道現有密碼的情況下修改用戶密碼
- 30. 保護REST API的用戶/密碼
我試過將常見的類重構成另一個jar,但似乎有太多的其他類的依賴關係,所以它仍然失敗,我仍在調查。但是建議將整個jar文件從WEB-INF/lib移動到APP-INF/lib,以便這些類可以被EJB和webapp模塊訪問?是否會有任何類加載器相關的問題或容器初始化servlet的任何問題? – krish 2011-03-01 04:36:36
請讓我知道如果我在上面的評論中的問題應該作爲一個單獨的問題? – krish 2011-03-01 04:38:08