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 + -
显示快捷键?