SecurityException 在 Docker 容器中使用 Centos/OpenJDK11/Tomcat 加载 JAAS 配置文件

问题描述

我正在尝试将现有的 Web 应用程序从 Windows 迁移到 Docker 容器中运行。我从 Centos 7 和 OpenJDK 11 开始。将 Tomcat 9 放在上面,然后就可以正常启动了。我开始为我的 Web 应用程序添加我们当前 Windows 部署的所有部分(war 文件、jaas.config、setenv.sh 等)。 docker 容器启动正常,但是当我尝试登录时出现以下错误..

04-Jan-2021 13:27:30.381 SEVERE [http-nio-8080-exec-9] org.apache.catalina.realm.JAASRealm.authenticate Unexpected error
    java.lang.SecurityException: java.io.IOException: /opt/tomcat/latest/conf/jaas.config
 (No such file or directory)
        at java.base/sun.security.provider.ConfigFile$Spi.<init>(ConfigFile.java:137)

我停止容器并以交互模式启动我确认文件在那个位置。

root@eac3366e9b83:/# ls -ltr /opt/tomcat/latest/conf/
total 236
-rwxrwxrwx 1 root   root      107 Jul 13  2019 jaas.config

可能导致问题的原因是什么?

解决方法

问题是从 windows 复制到 docker 镜像的 jaas.config 文件和 setenv.sh 包含 windows 行终止。因此,当 tomcat 尝试加载 jaas 配置文件时,名称末尾有多余的字符,并且在 File.exists 中失败。文件内容修复后,身份验证模块加载正常。