jackson.adoc 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. [[jackson]]
  2. = Jackson Support
  3. Spring Security provides Jackson 3 support for persisting Spring Security related classes.
  4. This can improve the performance of serializing Spring Security related classes when working with distributed sessions (i.e. session replication, Spring Session, etc).
  5. [NOTE]
  6. ====
  7. Jackson 2 support is still available but deprecated for removal, so you are encouraged to migrate to Jackson 3.
  8. ====
  9. To use it, register `SecurityJacksonModules.getModules(ClassLoader)` with `JsonMapper.Builder` (https://github.com/FasterXML/jackson-databind[jackson-databind]):
  10. [tabs]
  11. ======
  12. Java::
  13. +
  14. [source,java,role="primary"]
  15. ----
  16. ClassLoader loader = getClass().getClassLoader();
  17. JsonMapper mapper = JsonMapper.builder()
  18. .addModules(SecurityJacksonModules.getModules(loader))
  19. .build();
  20. // ... use JsonMapper as normally ...
  21. SecurityContext context = new SecurityContextImpl();
  22. // ...
  23. String json = mapper.writeValueAsString(context);
  24. ----
  25. Kotlin::
  26. +
  27. [source,kotlin,role="secondary"]
  28. ----
  29. val loader = javaClass.classLoader
  30. val mapper = JsonMapper.builder()
  31. .addModules(SecurityJacksonModules.getModules(loader))
  32. .build()
  33. // ... use JsonMapper as normally ...
  34. val context: SecurityContext = SecurityContextImpl()
  35. // ...
  36. val json: String = mapper.writeValueAsString(context)
  37. ----
  38. ======
  39. [NOTE]
  40. ====
  41. Using `SecurityJacksonModules` as above enables automatic inclusion of type information and configure a
  42. `PolymorphicTypeValidator` that handles the validation of class names.
  43. ====
  44. If needed, you can add custom classes to the validation handling.
  45. [tabs]
  46. ======
  47. Java::
  48. +
  49. [source,java,role="primary"]
  50. ----
  51. ClassLoader loader = getClass().getClassLoader();
  52. BasicPolymorphicTypeValidator.Builder builder = BasicPolymorphicTypeValidator.builder()
  53. .allowIfSubType(MyCustomType.class);
  54. JsonMapper mapper = JsonMapper.builder()
  55. .addModules(SecurityJacksonModules.getModules(loader, builder))
  56. .build();
  57. ----
  58. Kotlin::
  59. +
  60. [source,kotlin,role="secondary"]
  61. ----
  62. val loader = javaClass.classLoader
  63. val builder = BasicPolymorphicTypeValidator.builder()
  64. .allowIfSubType(MyCustomType::class)
  65. val mapper = JsonMapper.builder()
  66. .addModules(SecurityJacksonModules.getModules(loader, builder))
  67. .build()
  68. ----
  69. ======
  70. [NOTE]
  71. ====
  72. The following Spring Security modules provide Jackson support:
  73. - spring-security-core (javadoc:org.springframework.security.jackson.CoreJacksonModule[])
  74. - spring-security-web (javadoc:org.springframework.security.web.jackson.WebJacksonModule[], javadoc:org.springframework.security.web.jackson.WebServletJacksonModule[], javadoc:org.springframework.security.web.server.jackson.WebServerJacksonModule[])
  75. - spring-security-oauth2-client (javadoc:org.springframework.security.oauth2.client.jackson.OAuth2ClientJacksonModule[])
  76. - spring-security-cas (javadoc:org.springframework.security.cas.jackson.CasJacksonModule[])
  77. - spring-security-ldap (javadoc:org.springframework.security.ldap.jackson.LdapJacksonModule[])
  78. - spring-security-saml2 (javadoc:org.springframework.security.saml2.jackson.Saml2JacksonModule[])
  79. ====