Hzero 主键加密组件解析

1.自动配置类

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package org.hzero.starter.keyencrypt;

import com.fasterxml.jackson.databind.ObjectMapper;
import feign.codec.Decoder;
import feign.optionals.OptionalDecoder;
import org.hzero.core.jackson.config.ObjectMapperPostProcess;
import org.hzero.core.message.MessageAccessor;
import org.hzero.core.util.ResponseUtils;
import org.hzero.starter.keyencrypt.core.EncryptProperties;
import org.hzero.starter.keyencrypt.core.EncryptionService;
import org.hzero.starter.keyencrypt.core.IEncryptionService;
import org.hzero.starter.keyencrypt.core.WebBeanPostProcessor;
import org.hzero.starter.keyencrypt.mvc.EncryptHeaderContextFilter;
import org.springframework.beans.factory.ObjectFactory;
import org.springframework.beans.factory.SmartInitializingSingleton;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.cloud.openfeign.support.ResponseEntityDecoder;
import org.springframework.cloud.openfeign.support.SpringDecoder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.PriorityOrdered;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;

@Configuration
@EnableConfigurationProperties({EncryptProperties.class})
public class EncryptConfiguration implements PriorityOrdered {
    public EncryptConfiguration() {
    }

    @Bean
    public SmartInitializingSingleton keyEncryptMessagesLoader() {
        return () -> {
            MessageAccessor.addBasenames(new String[]{"classpath:messages/messages_keyencrypt"});
        };
    }

    @Bean
    public EncryptHeaderContextFilter HeaderContextFilter() {
        return new EncryptHeaderContextFilter();
    }

    @Bean
    public IEncryptionService encryptionService(EncryptProperties encryptProperties) {
        return new EncryptionService(encryptProperties);
    }

    @Bean
    public WebBeanPostProcessor webBeanPostProcessor(ConfigurableBeanFactory beanFactory, IEncryptionService encryptionService, ObjectMapperPostProcess objectMapperPostProcess) {
        return new WebBeanPostProcessor(beanFactory, encryptionService, this.customObjectMapper(objectMapperPostProcess));
    }

    @Bean
    public Decoder feignDecoder(ObjectMapperPostProcess objectMapperPostProcess) {
        ObjectMapper customObjectMapper = this.customObjectMapper(objectMapperPostProcess);
        HttpMessageConverter jacksonConverter = new MappingJackson2HttpMessageConverter(customObjectMapper);
        ObjectFactory<HttpMessageConverters> objectFactory = () -> {
            return new HttpMessageConverters(new HttpMessageConverter[]{jacksonConverter});
        };
        ResponseUtils.setObjectMapper(customObjectMapper);
        return new OptionalDecoder(new ResponseEntityDecoder(new SpringDecoder(objectFactory)));
    }

    public ObjectMapper customObjectMapper(ObjectMapperPostProcess objectMapperPostProcess) {
        return (ObjectMapper)objectMapperPostProcess.postProcessAfterInitialization(new ObjectMapper(), "customObjectMapper");
    }

    public int getOrder() {
        return -2147483648;
    }
}

2.EncryptHeaderContextFilter 拦截器
3.注解@ Encrypt
4.定制springmvc中ArgumentResolver参数解析器

  1. EncryptPathVariableMethodArgumentResolver
  2. EncryptRequestParamMethodArgumentResolver
  3. EncryptRequestResponseBodyMethodProcessor
  4. EncryptServletModelAttributeMethodProcessor
    前面三个分别对@PathVariable,@RequestParam,@RequestBody,@ResponseBody注解标注的参数上的@Encrypt进行加密解析,主要调用EncryptionService类中的方法进行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值