当用户需要与数据库交互时,我正在使用Java。它从身份验证器检查适当的日志信息。
但现在我正在服务于服务器上的PDF文件。并非所有用户都应该有权访问此文件 - 或者此目录。
如何限制对它的访问?
在我天真的理解中,我考虑过使用Java / JSP限制访问,但是当用户实际获取服务器上的完整路径的URL到文件时,任何人都可以访问它。
答案 0 :(得分:1)
为它使用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等框架来满足此要求。
更多信息:
答案 1 :(得分:0)
除了身份验证之外,您还应该拥有权限系统。您应该定义一组权限,每个用户都应该拥有与之关联的这些权限的子集。您要保护的每个对象也应具有相关权限。然后,您应检查经过身份验证的用户是否具有服务对象所需的权限。
这是一般的想法。实际实现,权限类型,权限之间是否存在层次结构(例如,如果您具有"管理"权限,您还具有" pdf访问权限"权限)等等由编写本组织的组织的需求决定。