securedirectoryserviceimpl.java
来自「GridSphere 门户 提供一个基于 portlet 的高级开放源代码门户。」· Java 代码 · 共 480 行 · 第 1/2 页
JAVA
480 行
} public boolean fileExists(FileLocationID fileLocationID) { File file = getFile(fileLocationID, false); if (file == null || !file.exists()) return false; return true; } public FileLocationID createFileLocationID(String userID, String category, String fileName) { return new FileLocationID(userID, category, fileName); } public FileLocationID createFileLocationID(String category, String fileName) { return new FileLocationID("GUEST", category, fileName, true); } private File getFile(FileLocationID fileLocationID, boolean createPath) { String userID = fileLocationID.getUserID(); String appName = fileLocationID.getCategory(); String resource = fileLocationID.getFilePath(); if (userID == null || appName == null || resource == null || !inited) return null; //FOR SECURITY REASONS DO NOT CHANGE THE FOLLOWING REGEXPS (UNLESS YOU KNOW WHAT YOU ARE DOING) resource = util.substitute("s!\\\\!/!g", resource); do { resource = util.substitute("s!^/!!", resource); resource = util.substitute("s!\\.\\.!.!g", resource); resource = util.substitute("s!^\\.[\\/]!!", resource); } while (util.match("m!^/|\\.\\.|^\\.[\\/]!", resource)); String userDirectoryPath; if ((userDirectoryPath = getUserDirectoryPath(userID)) != null) { String filePath = userDirectoryPath + File.separator + appName; File file = new File(filePath); if (!file.exists()) { if (!file.mkdir()) { log.error("Unable to create directory for application " + filePath); return null; } } else if (!file.isDirectory()) { return null; } boolean canCreate = true; if (util.match("m!/!", resource)) { String tmpPath = util.substitute("s!/[^/]*$!!", resource); File dirTree = new File(filePath + File.separator + tmpPath); if (!dirTree.exists()) { if (createPath) canCreate = dirTree.mkdirs(); else return null; } else if (!dirTree.isDirectory()) canCreate = false; } if (canCreate) { filePath += File.separator + resource; file = new File(filePath); return file; } else { return null; } } else return null; } private boolean isInPath(String examineIsPath, String examineInPath) { examineIsPath = util.substitute("s! !!g", examineIsPath); examineInPath = util.substitute("s! !!g", examineInPath); examineIsPath = util.substitute("s!\\\\|/! !g", examineIsPath); examineInPath = util.substitute("s!\\\\|/! !g", examineInPath); StringTokenizer stringTokenizerIs = new StringTokenizer(examineIsPath); StringTokenizer stringTokenizerIn = new StringTokenizer(examineInPath); while (stringTokenizerIs.hasMoreTokens()) { String isToken = stringTokenizerIs.nextToken(); if (stringTokenizerIn.hasMoreTokens()) { String inToken = stringTokenizerIn.nextToken(); if (!isToken.equals(inToken)) return false; } } return true; } private void rewrite(InputStream input, OutputStream output) throws IOException { int numRead; byte[] buf = new byte[BUFFER_SIZE]; while (!((numRead = input.read(buf)) < 0)) { output.write(buf, 0, numRead); } } private String getUserDirectoryPath(String userID) { String userDirectoryPath = secureDirPath + File.separator + userID; File userDirectory = new File(userDirectoryPath); if (!userDirectory.exists()) { log.debug("Creating directory for userID: " + userDirectoryPath); if (!userDirectory.mkdir()) { log.error("Unable to create directory" + userDirectoryPath); return null; } } return userDirectoryPath; } private boolean deleteDirectory(String userID, String appName, String resource, boolean recursive, boolean delTree) { if (userID == null || appName == null || resource == null || !inited) return false; resource = util.substitute("s!\\\\!/!g", resource); resource = util.substitute("s!^/!!", resource); String userDirectoryPath; if ((userDirectoryPath = getUserDirectoryPath(userID)) != null) { String filePath = userDirectoryPath + "/" + appName; File file = new File(filePath); if (!file.exists()) { if (!file.mkdir()) { log.error("Unable to create directory for application " + filePath); return false; } } else if (!file.isDirectory()) { return false; } file = new File(filePath + File.separator + resource); if (!file.isDirectory()) return false; if (!recursive) return file.delete(); if (!delTree) return deleteDirectory(file); boolean toRet = deleteDirectory(file); File secureDir = new File(secureDirPath); String parent = file.getParent(); while (parent != null) { File dir = new File(parent); if (dir.isDirectory()) { //just to be sure ;-) if (dir.compareTo(secureDir) == 0) break; if (!dir.delete()) break; } else break; parent = dir.getParent(); } return toRet; } else return false; } private boolean deleteDirectory(File f) { File[] files = f.listFiles(); for (int i = 0; i < files.length; ++i) { if (files[i].isDirectory()) { deleteDirectory(files[i]); } else { files[i].delete(); } } return f.delete(); } private boolean deleteFile(String userID, String appName, String resource, boolean delTree) { File file = getFile(new FileLocationID(userID, appName, resource)); if (file == null) return false; if (!file.delete()) return false; if (delTree) { File secureDir = new File(secureDirPath); String parent = file.getParent(); while (parent != null) { File dir = new File(parent); if (dir.isDirectory()) { //just to be sure ;-) if (dir.compareTo(secureDir) == 0) break; if (!dir.delete()) break; } else break; parent = dir.getParent(); } } return true; } private boolean copyResource(String userID, String appName, String resourceSource, String resourceDestination) { if (userID == null || appName == null || resourceSource == null || resourceDestination == null || !inited) return false; resourceSource = util.substitute("s!\\\\!/!g", resourceSource); resourceSource = util.substitute("s!^/!!", resourceSource); String userDirectoryPath; if ((userDirectoryPath = getUserDirectoryPath(userID)) != null) { String filePath = userDirectoryPath + File.separator + appName; File file = new File(filePath); if (!file.exists()) { if (!file.mkdir()) log.error("Unable to create directory for application " + filePath); return false; } else if (!file.isDirectory()) { return false; } file = new File(filePath + File.separator + resourceSource); if (!file.isDirectory()) { try { addFile(new FileLocationID(userID, appName, resourceDestination), file); return true; } catch (IOException e) { return false; } } else { resourceDestination += "\\\\"; resourceDestination = util.substitute("s!\\\\!/!g", resourceDestination); resourceDestination = util.substitute("s!^/!!", resourceDestination); return copyDirectory(userID, appName, file, resourceDestination); } } else return false; } private boolean copyDirectory(String userID, String appName, File file, String destination) { File[] files = file.listFiles(); boolean toRet = true; String directoryPath = getUserDirectoryPath(userID) + File.separator + appName + File.separator + destination; File dirTree = new File(directoryPath); if (!dirTree.exists()) if (!dirTree.mkdirs()) return false; for (int i = 0; i < files.length; ++i) { if (files[i].isDirectory()) { if (!copyDirectory(userID, appName, files[i], destination + files[i].getName() + File.separator)) toRet = false; } else { try { addFile(new FileLocationID(userID, appName, destination + files[i].getName()), files[i]); } catch (IOException e) { toRet = false; } } } return toRet; }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?