catalina.policy 带'#'字符的文件权限

catalina.policy file permission with '#' character

我正在将一个名为 foo#bar.war 的 war 文件部署到 tomcat 8.5(它创建了一个上下文路径 /foo/bar 一旦部署),我需要在 war 内的 jar 中设置权限。部署后,将在 webapps 下创建以下文件夹:foo#bar 并且我正在尝试在 catalina.policy 中设置权限,如下所示

grant codeBase "file:${catalina.base}${/}webapps${/}foo#bar${/}WEB-INF${/}lib${/}myjar.jar" {
         permission .......
};

但是它不起作用,我在调试时看到它正在编码 # 字符并且无法在文件系统中找到文件夹。我尝试转义 # 但没有成功。

也试过不解压war并设置权限

grant codeBase "file:${/}foo#bar.war!${/}WEB-INF${/}lib${/}myjar.jar" {
         permission .......
};

但是 #

遇到了同样的问题

有没有办法转义 # 字符?

file: 是一个 URL。因此 # 可以编码为 %23.

另外我会使用简单的'/'而不是${/}

例如,对于当前的 Tomcat 9.0.x 和 Java 11,我可以使用默认的管理器 Web 应用程序执行以下操作:

  1. webapps/manager 重命名为 webapps/a#manager

  2. 通过替换

    编辑conf/catalina.policy
    grant codeBase "file:${catalina.base}/webapps/manager/-" {
       ...
       permission org.apache.catalina.security.DeployXmlPermission "manager";
    

    grant codeBase "file:${catalina.base}/webapps/a%23manager/-" {
       ...
       permission org.apache.catalina.security.DeployXmlPermission "a#manager";
    
  3. 启动 Apache Tomcat 并启用安全管理器 (catalina start -security)

  4. 访问http://localhost:8080/a/manager/html