SpringSecurityJackson2Module.java
- package cn.home1.oss.lib.common;
- import com.fasterxml.jackson.core.JsonGenerator;
- import com.fasterxml.jackson.core.JsonParser;
- import com.fasterxml.jackson.core.JsonToken;
- import com.fasterxml.jackson.databind.DeserializationContext;
- import com.fasterxml.jackson.databind.JsonDeserializer;
- import com.fasterxml.jackson.databind.JsonSerializer;
- import com.fasterxml.jackson.databind.ObjectMapper;
- import com.fasterxml.jackson.databind.SerializerProvider;
- import com.fasterxml.jackson.databind.module.SimpleModule;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.core.env.PropertyResolver;
- import java.io.IOException;
- @Slf4j
- public class SpringSecurityJackson2Module extends SimpleModule {
- private static final long serialVersionUID = 1L;
- public SpringSecurityJackson2Module() {
- super();
- try {
- // TODO remove all SimpleGrantedAuthority.
- Class.forName("org.springframework.security.core.GrantedAuthority");
- addSerializer(org.springframework.security.core.GrantedAuthority.class, new GrantedAuthoritySerializer());
- addDeserializer(org.springframework.security.core.GrantedAuthority.class, new GrantedAuthorityDeserializer());
- addSerializer(org.springframework.security.core.authority.SimpleGrantedAuthority.class, //
- new GrantedAuthoritySerializer());
- addDeserializer(org.springframework.security.core.authority.SimpleGrantedAuthority.class, //
- new GrantedAuthorityDeserializer());
- } catch (final ClassNotFoundException ignored) {
- log.debug("class not found, skip SpringSecurityJackson2Module", ignored);
- }
- }
- /**
- * jackson2 module for spring security (
- * {@link org.springframework.security.core.GrantedAuthority},
- * {@link org.springframework.security.core.authority.SimpleGrantedAuthority}
- * ).
- *
- * @author zhanghaolun
- */
- public enum Jackson2SpringSecurityConfigurator implements Jackson2Configurator<Jackson2Configurator.BuildinJackson2Configurators> {
- JACKSON2_SPRINGSECURITY_CONFIGURATOR {
- @Override
- public <M extends ObjectMapper> M config(final PropertyResolver propertyResolver, final M mapper) {
- mapper.registerModule(new SpringSecurityJackson2Module());
- return mapper;
- }
- };
- @Override
- public abstract <M extends ObjectMapper> M config(PropertyResolver propertyResolver, M mapper);
- }
- public static class GrantedAuthoritySerializer //
- extends JsonSerializer<org.springframework.security.core.GrantedAuthority> {
- @Override
- public void serialize( //
- final org.springframework.security.core.GrantedAuthority value, //
- final JsonGenerator jsonGenerator, //
- final SerializerProvider provider //
- ) throws IOException {
- jsonGenerator.writeString(value.toString());
- }
- }
- public static class GrantedAuthorityDeserializer //
- extends JsonDeserializer<org.springframework.security.core.authority.SimpleGrantedAuthority> {
- @Override
- public org.springframework.security.core.authority.SimpleGrantedAuthority deserialize( //
- final JsonParser jsonParser, //
- final DeserializationContext deserializationContext //
- ) throws IOException {
- final org.springframework.security.core.authority.SimpleGrantedAuthority grantedAuthority;
- final JsonToken currentToken = jsonParser.getCurrentToken();
- if (JsonToken.VALUE_STRING.equals(currentToken)) {
- try {
- final String grantedAuthorityString = jsonParser.getText().trim();
- grantedAuthority = new org.springframework.security.core.authority.SimpleGrantedAuthority( //
- grantedAuthorityString);
- return grantedAuthority;
- } catch (final Exception translated) {
- throw new Jackson2Utils.RuntimeJsonProcessingException("couldn't parse GrantedAuthority", translated);
- }
- } else {
- throw new IllegalStateException();
- }
- }
- }
- }