Jackson 支援

Spring Security 為持久化 Spring Security 相關類提供了 Jackson 3 支援。這可以提高在使用分散式會話(即會話複製、Spring Session 等)時序列化 Spring Security 相關類的效能。

Jackson 2 支援仍然可用,但已棄用並將在未來版本中移除,因此建議您遷移到 Jackson 3。

要使用它,請將 SecurityJacksonModules.getModules(ClassLoader) 註冊到 JsonMapper.Builder (jackson-databind)。

  • 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 支援:

© . This site is unofficial and not affiliated with VMware.