#java #linux
Вопрос:
Я установил tomcat и развернул в нем веб-приложение java в Redhat.
Мое системное свойство user.home указывает на /opt/tomcat.
Это приложение пытается получить доступ к пути к файлу, подобному этому
root = new File(rootPath);
if (!root.isDirectory()) {
throw new IllegalArgumentException("Root is not a directory!");
}
Теперь я хочу получить доступ к любой папке за пределами /opt, как родной брат /opt, это приводит к ошибке в корне.isDirectory(). Но если папка находится внутри /opt/tomcat, то она правильно возвращается как истинная.
Обе папки /opt и /nasdata(папка, к которой я хочу получить доступ) имеют одинаковые разрешения.
обновленный
ls -la /опт
drwxr-xr-x. 8 root root 4096 Jul 21 16:15 .
dr-xr-xr-x. 21 root root 4096 Jul 21 20:53 ..
drwxr-xr-x 10 tomcat tomcat 4096 Jul 26 21:20 tomcat
ls -la /opt/tomcat
drwxr-xr-x 10 tomcat tomcat 4096 Jul 26 21:20 .
drwxr-xr-x. 8 root root 4096 Jul 21 16:15 ..
drwxr-x--- 2 tomcat tomcat 4096 Jul 21 16:15 bin
-rw-r----- 1 tomcat tomcat 18949 Jun 28 01:46 BUILDING.txt
drwxr-x--- 3 tomcat tomcat 4096 Jul 23 09:20 conf
-rw-r----- 1 tomcat tomcat 6210 Jun 28 01:46 CONTRIBUTING.md
drwxr-x--- 2 tomcat tomcat 4096 Jul 21 20:14 lib
-rw-r----- 1 tomcat tomcat 57092 Jun 28 01:46 LICENSE
drwxr-x--- 2 tomcat tomcat 4096 Jul 28 04:58 logs
lrwxrwxrwx 1 root root 9 Jul 26 21:20 nasdata -> /nasdata/
-rw-r----- 1 tomcat tomcat 2333 Jun 28 01:46 NOTICE
drwxr-x--- 2 tomcat tomcat 4096 Jul 23 09:20 .oracle_jre_usage
-rw-r----- 1 tomcat tomcat 3372 Jun 28 01:46 README.md
-rw-r----- 1 tomcat tomcat 6898 Jun 28 01:46 RELEASE-NOTES
-rw-r----- 1 tomcat tomcat 16507 Jun 28 01:46 RUNNING.txt
drwxr-x--- 2 tomcat tomcat 4096 Jul 23 09:34 temp
drwxr-x--- 9 tomcat tomcat 4096 Jul 23 09:37 webapps
drwxr-x--- 3 tomcat tomcat 4096 Jul 21 16:28 work
ls -la моей корневой папки. Я пытаюсь получить доступ к папке nasdata и указываю /nasdata в качестве пути.
dr-xr-xr-x. 21 root root 4096 Jul 21 20:53 .
dr-xr-xr-x. 21 root root 4096 Jul 21 20:53 ..
-rw-r--r-- 1 root root 0 Feb 4 20:43 .autorelabel
lrwxrwxrwx. 1 root root 7 Feb 4 20:39 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 Feb 4 20:52 boot
drwxr-xr-x 19 root root 3220 Jul 21 14:04 dev
drwxr-xr-x. 89 root root 4096 Jul 21 21:00 etc
drwxr-xr-x. 2 root root 4096 Feb 4 20:39 home
drwxr-xr-x 3 root root 4096 Jul 21 16:55 home2
lrwxrwxrwx. 1 root root 7 Feb 4 20:39 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 Feb 4 20:39 lib64 -> usr/lib64
drwxr-xr-x. 5 root root 1024 Jul 21 16:58 localhome
drwx------. 2 root root 16384 Feb 4 20:38 lost found
drwxr-xr-x. 2 root root 4096 Dec 14 2017 media
drwxr-xr-x. 2 root root 4096 Dec 14 2017 mnt
drwxrwxr-x 2 root 9999 4096 Jul 26 16:58 nasdata
drwxr-xr-x. 8 root root 4096 Jul 21 16:15 opt
dr-xr-xr-x 150 root root 0 Jul 21 14:04 proc
dr-xr-x---. 7 root root 4096 Jul 21 16:26 root
drwxr-xr-x 30 root root 980 Jul 21 16:46 run
lrwxrwxrwx. 1 root root 8 Feb 4 20:39 sbin -> usr/sbin
-rw-r--r-- 1 root root 127599309 Jul 21 20:53 sk
drwxr-xr-x. 2 root root 4096 Dec 14 2017 srv
dr-xr-xr-x 13 root root 0 Jul 21 14:04 sys
drwxrwxrwt. 14 root root 4096 Jul 28 03:43 tmp
drwxr-xr-x. 14 root root 4096 Jul 21 16:08 usr
drwxr-xr-x. 20 root root 4096 Feb 4 20:46 var
С наилучшими пожеланиями,
Саурав
Комментарии:
1. Можете ли вы дать вывод структуры каталогов на сервере, касающийся этих элементов? нравится
ls -la
показывать/opt
и/opt/tomcat
? таким образом, мы можем видеть, что видит bash, и можем помочь ответить на то, как интерпретируется Java2. @GrantLindsey спасибо за ответ…обновил свой пост результатами команды ls-la
3. «Теперь я хочу получить доступ к любой папке за пределами /opt, как родной брат /opt», — как это согласуется с тем, что вы пытаетесь получить доступ к /opt/tomcat, который является дочерним /opt? Если вы спрашиваете об
/testfolder
этом , пожалуйста, также покажите выводls
команды, а также фактическое значениеrootPath
. Кроме того, вы пробовали использовать каталог братьев/opt/tomcat
и сестер , например/opt/testfolder
? Поскольку/testfolder
является дочерним по отношению к корню, это может быть ОС, которая не позволяет вашему приложению получить к нему доступ. Пожалуйста, также покажитеls
команду для/
(нам нужно только увидеть результаты дляopt
иtestfolder
.4. Я здесь не эксперт, но замечаю
.
, что разрешения после включения/opt
и отсутствие одного и того же/nasdata
. Для получения дополнительной информации смотрите здесь: superuser.com/questions/230559/…5. The java.io. Класс File очень старый и имеет прискорбную привычку возвращать вводящие в заблуждение ошибки (или вообще не допускать ошибок) при сбое многих операций. Вы обнаружите, что устранить вашу проблему намного проще, если замените все типы использования файлов
Path
Files
классами и более нового пакета java.nio.file , который возвращает гораздо более точные и информативные ошибки при сбое операций.