package com.kxs.system.biz.config; import cn.hutool.crypto.symmetric.AES; import com.fasterxml.jackson.databind.ObjectMapper; import com.kxs.system.biz.event.SysLogListener; import com.kxs.system.biz.filter.RequestDecoderFilter; import com.kxs.common.core.constant.SecurityConstants; import com.kxs.common.log.config.LxqLogProperties; import com.kxs.system.biz.filter.ValidateCodeGatewayFilter; import com.kxs.system.biz.service.SysLogService; import lombok.RequiredArgsConstructor; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.DependsOn; import org.springframework.data.redis.core.RedisTemplate; /** * @author lixueqiang */ @ComponentScan(basePackages = "com.kxs.system") @MapperScan(basePackages = "com.kxs.system.biz.mapper") @EnableConfigurationProperties({AesConfigProperties.class, GatewayConfigProperties.class}) @RequiredArgsConstructor public class SysConfigAutoConfiguration { private final AesConfigProperties aesConfigProperties; private final GatewayConfigProperties gatewayConfigProperties; @Bean public SysLogListener sysLogListener(SysLogService sysLogService, LxqLogProperties logProperties) { return new SysLogListener(sysLogService, logProperties); } @Bean public FilterRegistrationBean imageCodeFilterRegistration(RedisTemplate redisTemplate, ObjectMapper objectMapper) { FilterRegistrationBean registration = new FilterRegistrationBean<>(); registration.setFilter(new ValidateCodeGatewayFilter(redisTemplate, objectMapper, gatewayConfigProperties)); registration.addUrlPatterns(SecurityConstants.OAUTH_TOKEN_URL); registration.setOrder(Integer.MIN_VALUE); return registration; } /** * 加解密过滤器 */ @Bean @ConditionalOnProperty(name = "gateway.aes.enabled", matchIfMissing = true) @DependsOn("cryptoAes") public FilterRegistrationBean requestDecoderFilterRegistration(AES cryptoAes, ObjectMapper objectMapper) { FilterRegistrationBean registration = new FilterRegistrationBean<>(); registration.setFilter(new RequestDecoderFilter(cryptoAes, objectMapper, aesConfigProperties)); registration.addUrlPatterns("/*"); registration.setOrder(Integer.MIN_VALUE + 1); return registration; } /** *

* aes加密配置 此处设在配置类可以避免每次请求都去创建加密类,以此节约性能 *

* @return {@link AES} */ @Bean public AES cryptoAes() { return new AES(aesConfigProperties.getEncodeMode(), aesConfigProperties.getEncodePadding(), // 密钥,可以自定义 aesConfigProperties.getEncodeKey().getBytes(), // iv加盐,按照实际需求添加 aesConfigProperties.getEncodeIv().getBytes()); } }