|
1 | 1 | [[jackson]] |
2 | 2 | = Jackson Support |
3 | 3 |
|
4 | | -Spring Security provides Jackson support for persisting Spring Security related classes. |
| 4 | +Spring Security provides Jackson 3 support for persisting Spring Security related classes. |
5 | 5 | This can improve the performance of serializing Spring Security related classes when working with distributed sessions (i.e. session replication, Spring Session, etc). |
6 | 6 |
|
7 | | -To use it, register the `SecurityJacksonModules.getModules(ClassLoader)` with `JsonMapper.Builder` (https://github.com/FasterXML/jackson-databind[jackson-databind]): |
| 7 | +[NOTE] |
| 8 | +==== |
| 9 | +Jackson 2 support is still available but deprecated for removal, so you are encouraged to migrate to Jackson 3. |
| 10 | +==== |
| 11 | + |
| 12 | +To use it, register `SecurityJacksonModules.getModules(ClassLoader)` with `JsonMapper.Builder` (https://github.com/FasterXML/jackson-databind[jackson-databind]): |
8 | 13 |
|
9 | 14 | [tabs] |
10 | 15 | ====== |
@@ -39,12 +44,49 @@ val json: String = mapper.writeValueAsString(context) |
39 | 44 | ---- |
40 | 45 | ====== |
41 | 46 |
|
| 47 | +[NOTE] |
| 48 | +==== |
| 49 | +Using `SecurityJacksonModules` as above enables automatic inclusion of type information and configure a |
| 50 | +`PolymorphicTypeValidator` that handles the validation of class names. |
| 51 | +==== |
| 52 | + |
| 53 | +If needed, you can add custom classes to the validation handling. |
| 54 | + |
| 55 | +[tabs] |
| 56 | +====== |
| 57 | +Java:: |
| 58 | ++ |
| 59 | +[source,java,role="primary"] |
| 60 | +---- |
| 61 | +ClassLoader loader = getClass().getClassLoader(); |
| 62 | +BasicPolymorphicTypeValidator.Builder builder = BasicPolymorphicTypeValidator.builder() |
| 63 | + .allowIfSubType(MyCustomType.class); |
| 64 | +JsonMapper mapper = JsonMapper.builder() |
| 65 | + .addModules(SecurityJacksonModules.getModules(loader, builder)) |
| 66 | + .build(); |
| 67 | +---- |
| 68 | +
|
| 69 | +Kotlin:: |
| 70 | ++ |
| 71 | +[source,kotlin,role="secondary"] |
| 72 | +---- |
| 73 | +val loader = javaClass.classLoader |
| 74 | +val builder = BasicPolymorphicTypeValidator.builder() |
| 75 | + .allowIfSubType(MyCustomType::class) |
| 76 | +val mapper = JsonMapper.builder() |
| 77 | + .addModules(SecurityJacksonModules.getModules(loader, builder)) |
| 78 | + .build() |
| 79 | +---- |
| 80 | +====== |
| 81 | + |
42 | 82 | [NOTE] |
43 | 83 | ==== |
44 | 84 | The following Spring Security modules provide Jackson support: |
45 | 85 |
|
46 | | -- spring-security-core (`CoreJacksonModule`) |
47 | | -- spring-security-web (`WebJacksonModule`, `WebServletJacksonModule`, `WebServerJacksonModule`) |
48 | | -- xref:servlet/oauth2/client/index.adoc#oauth2client[ spring-security-oauth2-client] (`OAuth2ClientJacksonModule`) |
49 | | -- spring-security-cas (`CasJacksonModule`) |
| 86 | +- spring-security-core (javadoc:org.springframework.security.jackson.CoreJacksonModule[]) |
| 87 | +- 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[]) |
| 88 | +- spring-security-oauth2-client (javadoc:org.springframework.security.oauth2.client.jackson.OAuth2ClientJacksonModule[]) |
| 89 | +- spring-security-cas (javadoc:org.springframework.security.cas.jackson.CasJacksonModule[]) |
| 90 | +- spring-security-ldap (javadoc:org.springframework.security.ldap.jackson.LdapJacksonModule[]) |
| 91 | +- spring-security-saml2 (javadoc:org.springframework.security.saml2.jackson.Saml2JacksonModule[]) |
50 | 92 | ==== |
0 commit comments