Jackson サポート

Spring Security は、Spring Security 関連クラスを永続化するための Jackson 3 サポートを提供します。これにより、分散セッション(つまり、セッションレプリケーション、Spring Session など)で作業する際に Spring Security 関連クラスを直列化するパフォーマンスを改善できます。

Jackson 2 のサポートはまだ利用可能ですが、削除が推奨されていないため、Jackson 3 に移行することをお勧めします。

これを使用するには、SecurityJacksonModules.getModules(ClassLoader) を JsonMapper.Builder ( jackson-databind [GitHub] (英語) ) に登録します。

  • Java

  • Kotlin

ClassLoader loader = getClass().getClassLoader();
JsonMapper mapper = JsonMapper.builder()
        .addModules(SecurityJacksonModules.getModules(loader))
        .build();

// ... use JsonMapper as normally ...
SecurityContext context = new SecurityContextImpl();
// ...
String json = mapper.writeValueAsString(context);
val loader = javaClass.classLoader
val mapper = JsonMapper.builder()
    .addModules(SecurityJacksonModules.getModules(loader))
    .build()

// ... use JsonMapper as normally ...
val context: SecurityContext = SecurityContextImpl()
// ...
val json: String = mapper.writeValueAsString(context)

上記のように SecurityJacksonModules を使用すると、型情報が自動的に含められ、クラス名の検証を処理する PolymorphicTypeValidator が構成されます。

必要に応じて、検証処理にカスタムクラスを追加できます。

  • Java

  • Kotlin

ClassLoader loader = getClass().getClassLoader();
BasicPolymorphicTypeValidator.Builder builder = BasicPolymorphicTypeValidator.builder()
        .allowIfSubType(MyCustomType.class);
JsonMapper mapper = JsonMapper.builder()
        .addModules(SecurityJacksonModules.getModules(loader, builder))
        .build();
val loader = javaClass.classLoader
val builder = BasicPolymorphicTypeValidator.builder()
        .allowIfSubType(MyCustomType::class)
val mapper = JsonMapper.builder()
    .addModules(SecurityJacksonModules.getModules(loader, builder))
    .build()

以下の Spring Security モジュールは、Jackson サポートを提供します。