web-dev-qa-db-ja.com

JBoss 6.4.20パッチで許可されているJacksonのバージョンは何ですか?

6.4.20 JBossパッチ の後に使用されているJacksonのバージョンを更新しようとしています。私はorg.codehause.jacksonを使用しており、JBoss 6.4.xは、私が知る限り、新しいcom.fasterxml.jacksonの暗黙的な依存関係を提供していません。

jackson-mapper-asl-1.9.9.redhat-6このパッチ に使用できる有効なパッケージであると想定することは適切ですか? 6.4.20アナウンスメント のnoarchセクションまでスクロールすると、codehaus-jackson-mapper-asl-1.9.9-12.redhat_6が表示されます。これは推奨バージョンであることを意味しますか? 18/05/14にリリースされ、05/15/18に発表されたことがわかります。

codehause-jackson-mapper-aslfasterxml-jackson-databindに関連付けられているため、現在次のエラーが発生しています。これは、間違ったバージョンを使用していると思わせる原因になります。

16:01:22,620エラー[org.jboss.resteasy.resteasy_jaxrs.i18n](http-127.0.0.1:8080-1)RESTEASY000100:実行に失敗しましたPOST/find:org.jboss.resteasy .spi.ReaderException:

org.codehaus.jackson.map.JsonMappingException:逆シリアル化する不正なタイプ[...]:セキュリティ上の理由により防止

[...]

原因:org.codehaus.jackson.map.JsonMappingException:不正なタイプ[...]が非直列化されます:org.codehaus.jackson.map.deser.BeanDeserializerFactory.checkLegalTypes(BeanDeserializerFactory.Java:1521)でセキュリティ上の理由により防止されました[jackson -mapper-asl-1.9.9.redhat-6.jar:1.9.9.redhat-6] `

10
marco dominguez

最近JBoss EAP 6.3.0から6.4.20にアップグレードしましたが、同じ例外がありました。

例外のスタックトレースをたどると、システムプロパティjackson.deserialization.whitelist.packagesに、逆シリアル化するクラスの完全なクラス名を設定する必要があることがわかりました。

必要に応じて、パッケージのサフィックスのみを指定できます。複数の値の場合は、コンマで区切ります。これは、38行目から45行目のjackson-mapper-asl-1.9.9.redhat-6.jarクラスorg.codehaus.jackson.map.deser.BeanDeserializerFactoryで確認できます。

JBoss環境では、次のようにstandalone*.xmlまたはdomain.xmlでシステムプロパティを定義できます。

<system-properties>
    <property name="jackson.deserialization.whitelist.packages" value="br.com.myapp" />
</system-properties>
15
MhagnumDw

@MhagnumDwの答えに基づいて、JBoss 6.4.20パッチでも同じエラーが発生し、このソリューションを使用しました。これが https://maven.repository.redhat.com/techpreview/all/org/codehaus/jackson/jackson-mapper-asl/1.9.9.redhat-6/jacksonからのソースコード関連のソースコードです。 -mapper-asl-1.9.9.redhat-6-sources.jar org.codehaus.jackson.map.deser.BeanDeserializerFactory内;

/**
     * @since 1.9.9.redhat-5
     */
protected void checkLegalTypes(DeserializationConfig config, JavaType type,
        BeanDescription beanDesc)
    throws JsonMappingException
{
    // There are certain nasty classes that could cause problems, mostly
    // via default typing -- catch them here.
    String full = type.getRawClass().getName();

    Iterator<String> iter = _cfgLegalPackageNames.iterator();

    boolean pass = false;

    while(iter.hasNext()) {
        if(full.startsWith(iter.next())) {
            pass = true;
            break;
        }
    }

    if(!pass) {
        throw new JsonMappingException(
                                  String.format("Illegal type (%s) to deserialize: prevented for security reasons", full));
    }
}

Full.startsWith(iter.next())は、上位レベルのパッケージ名をホワイトリストに追加できることを示しています。例えば、

<system-properties>
    <property name="jackson.deserialization.whitelist.packages" value="br.com.myapp" />
</system-properties>

ホワイトリストbr.com.myapp.package.aclassおよびbr.com.myapp.package.bclass

2
leontp587