使用 Java 在 Tomcat 9 中创建文件时出错
Error while creating file in Tomcat 9 using Java
我有一个 Java 程序,之前 运行 在 Tomcat 8.
现在,我已经将 Tomcat 升级到 Tomcat 9,我发现程序在 getAbsoluteFile
处给我错误。
我怀疑错误是因为文件夹访问权限的限制。
但是我已经修改了chown root的权限,chmod 777,还是报同样的错误-
java.io.FileOutputStream.open(FileOutputStream.java:270) Jun 1
16:48:29 te tomcat9[7844]: #011at
java.io.FileOutputStream.(FileOutputStream.java:213) Jun 1
16:48:29 te tomcat9[7844]: #011at
java.io.FileOutputStream.(FileOutputStream.java:162) Jun 1
16:48:29 te tomcat9[7844]: #011at
java.io.FileWriter.(FileWriter.java:90) Jun 1 16:48:29 te
tomcat9[7844]: #011at
auap.AdaptiveAuthService.logWriter(AdaptiveAuthService.java:1134) Jun
1 16:48:29 te tomcat9[7844]: #011at
auap.AdaptiveAuthService.logWriter(AdaptiveAuthService.java:1151)
同一段代码在 Tomcat 8 中运行正常,但在 Tomcat 9 中运行不正常。
Tomcat9 的安全增强是否有任何限制导致我的代码不能运行?
以上是我用来在 Tomcat8 和 Tomcat9 中创建文件的代码。
private static int logWriter(String data) {
Calendar now = Calendar.getInstance();
int year_file = now.get(Calendar.YEAR);
int month_file= (now.get(Calendar.MONTH) + 1);
int date_file = now.get(Calendar.DATE);
String filename = "LogAdaptive"+year_file+month_file+date_file;
File logFile = new File("/var/logs/tomcat9/"+filename+".txt");
boolean blnExists = logFile.exists();
FileWriter fw = null;
FileWriter fstream = null;
BufferedWriter bw = null;
BufferedWriter fbw = null;
try {
if (!blnExists) // if not exist, create file
{
fw = new FileWriter(logFile.getAbsoluteFile());
bw = new BufferedWriter(fw);
bw.write(data);
String newLine = System.getProperty("line.separator");
bw.write(newLine);
bw.close();
fw.close();
} else // if exist, amend file
{
fstream = new FileWriter(logFile, true);
fbw = new BufferedWriter(fstream);
fbw.write(data);
fbw.newLine();
fbw.close();
fstream.close();
}
} catch (Exception e) {
logWriter(EXCEPTION_STR0 + e);
} finally {
try {
if (fw != null){
fw.close();
}
} catch (IOException e) {
logWriter(EXCEPTION_IO + e);
}
try {
if (fstream != null){
fstream.close();
}
} catch (IOException e) {
logWriter(EXCEPTION_IO + e);
}
try {
if (bw != null){
bw.close();
}
} catch (IOException e) {
logWriter(EXCEPTION_IO + e);
}
try {
if (fbw != null){
fbw.close();
}
} catch (IOException e) {
logWriter(EXCEPTION_IO + e);
}
}
return 1;
} // end logWriter function
我怀疑您会给 777 一个目录的访问权限,而不是其子目录的访问权限。使用 chmod -R 777
授予对目录、子目录和目录内文件的访问权限。
但是,通常我们不会给 777 访问权限。我们启动我们的应用程序进程,在您的情况下,它是 tomcat 启动脚本或服务,使用对所有相关目录具有适当权限的适当用户。
如果您使用 "root" 用户或任何具有适当权限访问相关目录的用户启动您的应用程序,您的问题将得到解决。
我有一个 Java 程序,之前 运行 在 Tomcat 8.
现在,我已经将 Tomcat 升级到 Tomcat 9,我发现程序在 getAbsoluteFile
处给我错误。
我怀疑错误是因为文件夹访问权限的限制。
但是我已经修改了chown root的权限,chmod 777,还是报同样的错误-
java.io.FileOutputStream.open(FileOutputStream.java:270) Jun 1 16:48:29 te tomcat9[7844]: #011at java.io.FileOutputStream.(FileOutputStream.java:213) Jun 1 16:48:29 te tomcat9[7844]: #011at java.io.FileOutputStream.(FileOutputStream.java:162) Jun 1 16:48:29 te tomcat9[7844]: #011at java.io.FileWriter.(FileWriter.java:90) Jun 1 16:48:29 te tomcat9[7844]: #011at auap.AdaptiveAuthService.logWriter(AdaptiveAuthService.java:1134) Jun 1 16:48:29 te tomcat9[7844]: #011at auap.AdaptiveAuthService.logWriter(AdaptiveAuthService.java:1151)
同一段代码在 Tomcat 8 中运行正常,但在 Tomcat 9 中运行不正常。
Tomcat9 的安全增强是否有任何限制导致我的代码不能运行?
以上是我用来在 Tomcat8 和 Tomcat9 中创建文件的代码。
private static int logWriter(String data) {
Calendar now = Calendar.getInstance();
int year_file = now.get(Calendar.YEAR);
int month_file= (now.get(Calendar.MONTH) + 1);
int date_file = now.get(Calendar.DATE);
String filename = "LogAdaptive"+year_file+month_file+date_file;
File logFile = new File("/var/logs/tomcat9/"+filename+".txt");
boolean blnExists = logFile.exists();
FileWriter fw = null;
FileWriter fstream = null;
BufferedWriter bw = null;
BufferedWriter fbw = null;
try {
if (!blnExists) // if not exist, create file
{
fw = new FileWriter(logFile.getAbsoluteFile());
bw = new BufferedWriter(fw);
bw.write(data);
String newLine = System.getProperty("line.separator");
bw.write(newLine);
bw.close();
fw.close();
} else // if exist, amend file
{
fstream = new FileWriter(logFile, true);
fbw = new BufferedWriter(fstream);
fbw.write(data);
fbw.newLine();
fbw.close();
fstream.close();
}
} catch (Exception e) {
logWriter(EXCEPTION_STR0 + e);
} finally {
try {
if (fw != null){
fw.close();
}
} catch (IOException e) {
logWriter(EXCEPTION_IO + e);
}
try {
if (fstream != null){
fstream.close();
}
} catch (IOException e) {
logWriter(EXCEPTION_IO + e);
}
try {
if (bw != null){
bw.close();
}
} catch (IOException e) {
logWriter(EXCEPTION_IO + e);
}
try {
if (fbw != null){
fbw.close();
}
} catch (IOException e) {
logWriter(EXCEPTION_IO + e);
}
}
return 1;
} // end logWriter function
我怀疑您会给 777 一个目录的访问权限,而不是其子目录的访问权限。使用 chmod -R 777
授予对目录、子目录和目录内文件的访问权限。
但是,通常我们不会给 777 访问权限。我们启动我们的应用程序进程,在您的情况下,它是 tomcat 启动脚本或服务,使用对所有相关目录具有适当权限的适当用户。
如果您使用 "root" 用户或任何具有适当权限访问相关目录的用户启动您的应用程序,您的问题将得到解决。