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 支持:
-
spring-security-core (CoreJacksonModule)
-
spring-security-web (WebJacksonModule, WebServletJacksonModule, WebServerJacksonModule)
-
spring-security-oauth2-client (OAuth2ClientJacksonModule)
-
spring-security-oauth2-authorization-server (OAuth2AuthorizationServerJacksonModule)
-
spring-security-cas (CasJacksonModule)
-
spring-security-ldap (LdapJacksonModule)
-
spring-security-saml2 (Saml2JacksonModule)