SysConfigAutoConfiguration.java 3.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. package com.kxs.system.biz.config;
  2. import cn.hutool.crypto.symmetric.AES;
  3. import com.fasterxml.jackson.databind.ObjectMapper;
  4. import com.kxs.common.core.constant.SecurityConstants;
  5. import com.kxs.common.log.config.LxqLogProperties;
  6. import com.kxs.system.biz.event.SysLogListener;
  7. import com.kxs.system.biz.filter.GlobalCorsFilter;
  8. import com.kxs.system.biz.filter.RequestDecoderFilter;
  9. import com.kxs.system.biz.filter.ValidateCodeGatewayFilter;
  10. import com.kxs.system.biz.service.SysLogService;
  11. import lombok.RequiredArgsConstructor;
  12. import org.mybatis.spring.annotation.MapperScan;
  13. import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
  14. import org.springframework.boot.context.properties.EnableConfigurationProperties;
  15. import org.springframework.boot.web.servlet.FilterRegistrationBean;
  16. import org.springframework.context.annotation.Bean;
  17. import org.springframework.context.annotation.ComponentScan;
  18. import org.springframework.context.annotation.DependsOn;
  19. import org.springframework.data.redis.core.RedisTemplate;
  20. /**
  21. * @author lixueqiang
  22. */
  23. @ComponentScan(basePackages = "com.kxs.system")
  24. @MapperScan(basePackages = "com.kxs.system.biz.mapper")
  25. @EnableConfigurationProperties({AesConfigProperties.class, GatewayConfigProperties.class})
  26. @RequiredArgsConstructor
  27. public class SysConfigAutoConfiguration {
  28. private final AesConfigProperties aesConfigProperties;
  29. private final GatewayConfigProperties gatewayConfigProperties;
  30. @Bean
  31. public SysLogListener sysLogListener(SysLogService sysLogService, LxqLogProperties logProperties) {
  32. return new SysLogListener(sysLogService, logProperties);
  33. }
  34. /**
  35. * 验证码过滤器
  36. */
  37. @Bean
  38. public FilterRegistrationBean<ValidateCodeGatewayFilter> imageCodeFilterRegistration(RedisTemplate<String, Object> redisTemplate, ObjectMapper objectMapper) {
  39. FilterRegistrationBean<ValidateCodeGatewayFilter> registration = new FilterRegistrationBean<>();
  40. registration.setFilter(new ValidateCodeGatewayFilter(redisTemplate, objectMapper, gatewayConfigProperties));
  41. registration.addUrlPatterns(SecurityConstants.OAUTH_TOKEN_URL);
  42. registration.setOrder(Integer.MIN_VALUE + 2);
  43. return registration;
  44. }
  45. /**
  46. * 跨域过滤器
  47. */
  48. @Bean
  49. public FilterRegistrationBean<GlobalCorsFilter> corsFilterRegistration() {
  50. FilterRegistrationBean<GlobalCorsFilter> registration = new FilterRegistrationBean<>();
  51. registration.setFilter(new GlobalCorsFilter(gatewayConfigProperties));
  52. registration.addUrlPatterns("/*");
  53. registration.setOrder(Integer.MIN_VALUE);
  54. return registration;
  55. }
  56. /**
  57. * 加解密过滤器
  58. */
  59. @Bean
  60. @ConditionalOnProperty(name = "gateway.aes.enabled", matchIfMissing = true)
  61. @DependsOn("cryptoAes")
  62. public FilterRegistrationBean<RequestDecoderFilter> requestDecoderFilterRegistration(AES cryptoAes, ObjectMapper objectMapper) {
  63. FilterRegistrationBean<RequestDecoderFilter> registration = new FilterRegistrationBean<>();
  64. registration.setFilter(new RequestDecoderFilter(cryptoAes, objectMapper, aesConfigProperties));
  65. registration.addUrlPatterns("/*");
  66. registration.setOrder(Integer.MIN_VALUE + 1);
  67. return registration;
  68. }
  69. /**
  70. * <p>
  71. * aes加密配置 此处设在配置类可以避免每次请求都去创建加密类,以此节约性能
  72. * </p>
  73. * @return {@link AES}
  74. */
  75. @Bean
  76. public AES cryptoAes() {
  77. return new AES(aesConfigProperties.getEncodeMode(), aesConfigProperties.getEncodePadding(),
  78. // 密钥,可以自定义
  79. aesConfigProperties.getEncodeKey().getBytes(),
  80. // iv加盐,按照实际需求添加
  81. aesConfigProperties.getEncodeIv().getBytes());
  82. }
  83. }