Java の次の行を見てください。
Mac.getInstance("HmacSHA1");
これを簡単なテスト プログラムに入れると、サーバー上で問題なく動作します。ただし、コンテナでこの行を使用すると、
java.security.NoSuchAlgorithmException: Algorithm HmacSHA1 not available
at javax.crypto.Mac.getInstance(DashoA13*..)
どちらの場合も、同じ JDK インストールが使用されます。
少しグーグルで調べた後、次の2つのことを行うことで、なんとか機能させることができました。
sunjce_provider.jar
から$JAVA_HOME/jre/lib/ext
コンテナーの lib ディレクトリにコピーします。次の行をコードに追加します。
java.security.Security.addProvider(new com.sun.crypto.provider.SunJCE());
具体的には、これはApache Jamesメールレットで発生しますが、これは JVM オプションに関係していると確信しています。これが使用する起動スクリプトです。
最終的には機能するようになりましたが、ソリューションはハッキングされすぎて正しいものではないように感じます。何が起こっているのかの説明と、より「適切な」解決策をいただければ幸いです。
関連する質問: Java 暗号を使用すると NoSuchAlgorithmException が発生します。ただし、この場合、HmacSHA1 アルゴリズムはすぐにサポートされるべきであると確信しています。証拠として、これはテスト プログラムで問題なく動作します。