TrMybatisAutoConfiguration.java 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. package cn.tr.plugin.mybatis;
  2. import cn.tr.plugin.mybatis.config.filter.DruidAdRemoveFilter;
  3. import cn.tr.plugin.mybatis.config.handler.CreateAndUpdateMetaObjectHandler;
  4. import cn.tr.plugin.mybatis.config.logic.PteromysSqlInjector;
  5. import cn.tr.plugin.mybatis.config.page.PageConfig;
  6. import com.alibaba.druid.spring.boot.autoconfigure.properties.DruidStatProperties;
  7. import com.baomidou.mybatisplus.autoconfigure.MybatisPlusProperties;
  8. import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
  9. import com.baomidou.mybatisplus.core.injector.ISqlInjector;
  10. import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
  11. import com.baomidou.mybatisplus.extension.plugins.inner.BlockAttackInnerInterceptor;
  12. import com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor;
  13. import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
  14. import java.util.*;
  15. import com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor;
  16. import com.github.pagehelper.PageInterceptor;
  17. import org.apache.ibatis.plugin.Interceptor;
  18. import org.springframework.beans.BeansException;
  19. import org.springframework.beans.factory.config.BeanPostProcessor;
  20. import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
  21. import org.springframework.boot.web.servlet.FilterRegistrationBean;
  22. import org.springframework.context.annotation.Bean;
  23. /**
  24. * @ClassName : TrMybatisAutoConfiguration
  25. * @Description :
  26. * @Author : LF
  27. * @Date: 2023年02月21日
  28. */
  29. public class TrMybatisAutoConfiguration implements BeanPostProcessor {
  30. @Override
  31. public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
  32. return bean;
  33. }
  34. @Bean
  35. public ISqlInjector sqlInjector(){
  36. return new PteromysSqlInjector();
  37. }
  38. @Bean
  39. public PageConfig pageConfig(){
  40. return new PageConfig();
  41. }
  42. /**
  43. * 自动填充字段
  44. */
  45. @Bean
  46. public MetaObjectHandler createAndUpdateMetaObjectHandler(){
  47. return new CreateAndUpdateMetaObjectHandler();
  48. }
  49. /**
  50. * 创建 DruidAdRemoveFilter 过滤器,过滤 common.js 的广告
  51. */
  52. @Bean
  53. @ConditionalOnProperty(name = "spring.datasource.druid.web-stat-filter.enabled", havingValue = "true")
  54. public FilterRegistrationBean<DruidAdRemoveFilter> druidAdRemoveFilterFilter(DruidStatProperties properties) {
  55. // 获取 druid web 监控页面的参数
  56. DruidStatProperties.StatViewServlet config = properties.getStatViewServlet();
  57. // 提取 common.js 的配置路径
  58. String pattern = config.getUrlPattern() != null ? config.getUrlPattern() : "/druid/*";
  59. String commonJsPattern = pattern.replaceAll("\\*", "js/common.js");
  60. // 创建 DruidAdRemoveFilter Bean
  61. FilterRegistrationBean<DruidAdRemoveFilter> registrationBean = new FilterRegistrationBean<>();
  62. registrationBean.setFilter(new DruidAdRemoveFilter());
  63. registrationBean.addUrlPatterns(commonJsPattern);
  64. return registrationBean;
  65. }
  66. @Bean
  67. public MybatisPlusInterceptor mybatisPlusInterceptor(List<InnerInterceptor> innerInterceptorList) {
  68. MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
  69. for (InnerInterceptor innerInterceptor : innerInterceptorList) {
  70. if(innerInterceptor.getClass()== TenantLineInnerInterceptor.class){
  71. List<InnerInterceptor> interceptors = new ArrayList<>(interceptor.getInterceptors());
  72. interceptors.add(0,innerInterceptor);
  73. interceptor.setInterceptors(interceptors);
  74. }else {
  75. interceptor.addInnerInterceptor(innerInterceptor);
  76. }
  77. }
  78. return interceptor;
  79. }
  80. /**
  81. * 分页插件
  82. */
  83. @Bean
  84. public Interceptor paginationInnerInterceptor() {
  85. return new PageInterceptor();
  86. }
  87. /**
  88. * 禁止全表更新
  89. */
  90. @Bean
  91. public InnerInterceptor blockAttackInnerInterceptor() {
  92. return new BlockAttackInnerInterceptor();
  93. }
  94. /**
  95. * 乐观锁插件
  96. */
  97. @Bean
  98. public InnerInterceptor optimisticLockerInnerInterceptor() {
  99. return new OptimisticLockerInnerInterceptor();
  100. }
  101. }