我有一个Java程序,该程序以前在 Tomcat 8中运行。
现在,我已经将我的 Tomcat升级到Tomcat 9 ,并且发现该程序在getAbsoluteFile
处给我错误。
我怀疑该错误是由于文件夹访问权限的限制。
但是,我已经将权限更改为chown root chmod 777,但它仍然出现相同的错误-
java.io.FileOutputStream.open(FileOutputStream.java:270)6月1日 16:48:29 te tomcat9 [7844]:#011at java.io.FileOutputStream。(FileOutputStream.java:213)6月1日 16:48:29 te tomcat9 [7844]:#011at java.io.FileOutputStream。(FileOutputStream.java:162)6月1日 16:48:29 te tomcat9 [7844]:#011at java.io.FileWriter。(FileWriter.java:90)6月1日16:48:29 te tomcat9 [7844]:#011at auap.AdaptiveAuthService.logWriter(AdaptiveAuthService.java:1134)6月 1 16:48:29 te tomcat9 [7844]:#011at auap.AdaptiveAuthService.logWriter(AdaptiveAuthService.java:1151)
同一段代码在Tomcat 8中工作正常,但在Tomcat 9中工作不正常。
是否存在导致我的代码无法运行的Tomcat 9安全性增强限制?
上面是我用来在 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
答案 0 :(得分:1)
我怀疑您应该授予777访问目录的权限,但没有授予其子目录的访问权限。使用chmod -R 777
来访问目录,子目录和目录中的文件。
但是,通常我们不给777访问权限。我们以您的情况为tomcat启动脚本或服务来启动我们的应用程序流程,其中的适当用户具有对所有从属目录的适当特权。
如果您以“ root”用户或任何具有访问从属目录的适当特权的用户身份启动应用程序,则您的问题将得到解决。