2
1
0

先日、Confluenceを6.13.0 ⇒ 7.3.3にアップデートしたのですが、Confluenceで利用できていたユーザーマクロがうまく動作しなくなりました。

下記のようなコードで始まっているのですが、最初の
$content.class.forName('com.atlassian.spring.container.ContainerManager')の時点でクラスがうまく取得できていないようです。

#set($containerManagerClass = $content.class.forName('com.atlassian.spring.container.ContainerManager'))
#set($getInstanceMethod = $containerManagerClass.getDeclaredMethod('getInstance',null))
#set($containerManager = $getInstanceMethod.invoke(null,null))
#set($containerContext = $containerManager.containerContext)

#set($loginManager = $containerContext.getComponent('loginManager'))
#set($crowdService = $containerContext.getComponent('crowdService'))

新しいリファレンスを見ても、Managerで何ができるかは書いてあってもManagerをどうやって取得するかについては書いておらず、どのようにマクロを修正したらいいのかわからない状態です。

もしご存知の方が居たら、7以降のバージョンでどうやって各Managerクラスを取得すればいいか教えていただけないでしょうか?

    Commentコメントを追加...

    1 回答

    1.  
      3
      2
      1

      次の記事に記載されているのですが、Confluence 7.0 から、リフレクションでアクセスできる Class や package に制限が加わっています。

      1. Velocity-htmlsafe のアップグレード - Confluence 7.0 への準備
      2. https://bitbucket.org/atlassian/apache-velocity-1.6.4-atlassian/src/07d437f4b9f70c0f2fe0a54055fbbbed7cec4851/src/java/org/apache/velocity/runtime/defaults/velocity.properties#lines-223

      前述の2番目のリンクに制限が加わっている Class や packageが記載されており、その中に "java.lang.Class" も含まれているため、その影響でソースコードが動いていないものと思われます。

      試せていませんが、velocity.properties ファイルに次のような修正を加えることで今まで通りに使うことができる可能性はあります。
      しかしながら、リフレクションをできるようにすると Velocity に脆弱性が見つかった場合セキュリティ的に危険なため、その点を十分に注意したうえで、十分なテストを実施して使用するようにしてください。

      <Confluence のインストールディレクトリ>/confluence/WEB-INF/classes/velocity.properties
      修正内容
      introspector.restrict.packages=
      introspector.restrict.classes=
        Commentコメントを追加...