MybatisAutoConfiguration.java 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. package com.lxq.common.mybatis;
  2. import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
  3. import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
  4. import com.baomidou.mybatisplus.extension.plugins.inner.BlockAttackInnerInterceptor;
  5. import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
  6. import com.lxq.common.mybatis.config.MybatisPlusMetaObjectHandler;
  7. import com.lxq.common.mybatis.encrypt.DecryptInterceptor;
  8. import com.lxq.common.mybatis.encrypt.EncryptInterceptor;
  9. import com.lxq.common.mybatis.encrypt.FieldEncryptProperties;
  10. import com.lxq.common.mybatis.encrypt.service.DefaultFieldEncryptService;
  11. import com.lxq.common.mybatis.encrypt.utils.FieldEncryptUtil;
  12. import com.lxq.common.mybatis.plugins.LxqPaginationInnerInterceptor;
  13. import com.lxq.common.mybatis.resolver.SqlFilterArgumentResolver;
  14. import org.springframework.boot.context.properties.EnableConfigurationProperties;
  15. import org.springframework.context.annotation.Bean;
  16. import org.springframework.context.annotation.Configuration;
  17. import org.springframework.web.method.support.HandlerMethodArgumentResolver;
  18. import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
  19. import java.util.List;
  20. /**
  21. * <p>
  22. * mybatis plus 统一配置
  23. *
  24. * @author 没秃顶的码农
  25. * @date 2023/10/28
  26. */
  27. @Configuration(proxyBeanMethods = false)
  28. @EnableConfigurationProperties({FieldEncryptProperties.class})
  29. public class MybatisAutoConfiguration implements WebMvcConfigurer {
  30. /**
  31. * SQL 过滤器避免SQL 注入
  32. * @param argumentResolvers
  33. */
  34. @Override
  35. public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
  36. argumentResolvers.add(new SqlFilterArgumentResolver());
  37. }
  38. /**
  39. * 1.分页插件, 对于单一数据库类型来说,都建议配置该值,避免每次分页都去抓取数据库类型
  40. * 2.针对 update 和 delete 语句 作用: 阻止恶意的全表更新删除
  41. * 3.动态分表
  42. */
  43. @Bean
  44. public MybatisPlusInterceptor mybatisPlusInterceptor() {
  45. MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
  46. //分页插件
  47. interceptor.addInnerInterceptor(new LxqPaginationInnerInterceptor());
  48. //针对 update 和 delete 语句 作用: 阻止恶意的全表更新删除
  49. interceptor.addInnerInterceptor(new BlockAttackInnerInterceptor());
  50. //乐观锁
  51. interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
  52. return interceptor;
  53. }
  54. /**
  55. * 审计字段自动填充
  56. * @return {@link MetaObjectHandler}
  57. */
  58. @Bean
  59. public MybatisPlusMetaObjectHandler mybatisPlusMetaObjectHandler() {
  60. return new MybatisPlusMetaObjectHandler();
  61. }
  62. /**
  63. * 字段加解密拦截器
  64. */
  65. @Bean
  66. public DecryptInterceptor decryptInterceptor() {
  67. return new DecryptInterceptor();
  68. }
  69. /**
  70. * 字段加解密拦截器
  71. */
  72. @Bean
  73. public EncryptInterceptor encryptInterceptor() {
  74. return new EncryptInterceptor();
  75. }
  76. @Bean
  77. public DefaultFieldEncryptService fieldEncryptService(FieldEncryptProperties fieldEncryptProperties) {
  78. return new DefaultFieldEncryptService(fieldEncryptProperties);
  79. }
  80. @Bean
  81. public FieldEncryptUtil fieldEncryptUtil() {
  82. return new FieldEncryptUtil();
  83. }
  84. }