我目前在用戶需要與數據庫進行交互時使用Java。它從驗證器檢查適當的日誌信息。如何限制對使用Tomcat服務器的文件的訪問?
但現在我正在服務於服務器上的PDF文件。並非所有的用戶都可以訪問這個文件 - 或者這個目錄。
我該如何限制對它的訪問?
在我幼稚的理解中,我想過使用Java/JSP來限制訪問,但是當用戶實際上在服務器上使用完整路徑獲取URL時,任何人都可以訪問它。
我目前在用戶需要與數據庫進行交互時使用Java。它從驗證器檢查適當的日誌信息。如何限制對使用Tomcat服務器的文件的訪問?
但現在我正在服務於服務器上的PDF文件。並非所有的用戶都可以訪問這個文件 - 或者這個目錄。
我該如何限制對它的訪問?
在我幼稚的理解中,我想過使用Java/JSP來限制訪問,但是當用戶實際上在服務器上使用完整路徑獲取URL時,任何人都可以訪問它。
爲它使用Servlet過濾器。 servlet過濾器應映射到URL以訪問此PDF文件。例如:
@WebFilter("/path/to/your/pdf/*")
public class FileFilter implements Filter {
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
HttpSession session = request.getSession(false);
if (session == null) {
User user = (User)session.getAttribute("user");
if (validateUserForPdfDownload(user)) {
//user can download the file
chain.doFilter(req, res);
} else {
//user must not download the file
//redirect user to some URL
response.sendRedirect(request.getContextPath() + "/index.html");
}
}
}
public boolean validateUserForPdfDownload(User user) {
//define the logic to validate if user is able to download the file
}
}
請注意,這是一種基本方法。更復雜的解決方案涉及使用安全框架來驗證每個操作的用戶身份驗證和授權。您可以使用框架如Apache Shiro或Spring Security來滿足此要求。
更多信息:
除了剛纔認證,你應該有一個許可制度。您應該定義一組權限,並且每個用戶應該擁有與其關聯的這些權限的子集。您所保護的每個對象都應該具有關聯的權限。然後,您應該檢查經過身份驗證的用戶是否具有服務對象所需的權限。
這是一般的想法。實際的實現,權限的種類,權限之間是否存在層次結構(例如,如果您擁有「管理」權限,您還擁有「pdf訪問」權限)等等,都是由組織的需求決定的寫入。
你能否指點我一些更多的文獻或術語,我可以更多地瞭解許可制度? – 2014-10-20 19:26:16
你的意思是你試圖從你的本地計算機上訪問一個pdf文件,這個文件存儲在某個位置,而這個文件限制了這個優先權? – afzalex 2014-10-20 19:21:27
問題太廣泛。仔細閱讀http://stackoverflow.com/tour並描述你的問題,以及你到目前爲止所做的更多細節。 – ericbn 2014-10-20 19:21:52
@ericbn它並不寬泛。您可以使用servlet過濾器輕鬆完成此操作。 – 2014-10-20 19:24:51