package cn.tr.plugin.mybatis; import cn.tr.plugin.mybatis.config.filter.DruidAdRemoveFilter; import cn.tr.plugin.mybatis.config.handler.CreateAndUpdateMetaObjectHandler; import cn.tr.plugin.mybatis.config.logic.PteromysSqlInjector; import cn.tr.plugin.mybatis.config.page.PageConfig; import com.alibaba.druid.spring.boot.autoconfigure.properties.DruidStatProperties; import com.baomidou.mybatisplus.autoconfigure.MybatisPlusProperties; import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import com.baomidou.mybatisplus.core.injector.ISqlInjector; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.BlockAttackInnerInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor; import java.util.*; import com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor; import com.github.pagehelper.PageInterceptor; import org.apache.ibatis.plugin.Interceptor; import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanPostProcessor; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; /** * @ClassName : TrMybatisAutoConfiguration * @Description : * @Author : LF * @Date: 2023年02月21日 */ public class TrMybatisAutoConfiguration implements BeanPostProcessor { @Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { return bean; } @Bean public ISqlInjector sqlInjector(){ return new PteromysSqlInjector(); } @Bean public PageConfig pageConfig(){ return new PageConfig(); } /** * 自动填充字段 */ @Bean public MetaObjectHandler createAndUpdateMetaObjectHandler(){ return new CreateAndUpdateMetaObjectHandler(); } /** * 创建 DruidAdRemoveFilter 过滤器,过滤 common.js 的广告 */ @Bean @ConditionalOnProperty(name = "spring.datasource.druid.web-stat-filter.enabled", havingValue = "true") public FilterRegistrationBean druidAdRemoveFilterFilter(DruidStatProperties properties) { // 获取 druid web 监控页面的参数 DruidStatProperties.StatViewServlet config = properties.getStatViewServlet(); // 提取 common.js 的配置路径 String pattern = config.getUrlPattern() != null ? config.getUrlPattern() : "/druid/*"; String commonJsPattern = pattern.replaceAll("\\*", "js/common.js"); // 创建 DruidAdRemoveFilter Bean FilterRegistrationBean registrationBean = new FilterRegistrationBean<>(); registrationBean.setFilter(new DruidAdRemoveFilter()); registrationBean.addUrlPatterns(commonJsPattern); return registrationBean; } @Bean public MybatisPlusInterceptor mybatisPlusInterceptor(List innerInterceptorList) { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); for (InnerInterceptor innerInterceptor : innerInterceptorList) { if(innerInterceptor.getClass()== TenantLineInnerInterceptor.class){ List interceptors = new ArrayList<>(interceptor.getInterceptors()); interceptors.add(0,innerInterceptor); interceptor.setInterceptors(interceptors); }else { interceptor.addInnerInterceptor(innerInterceptor); } } return interceptor; } /** * 分页插件 */ @Bean public Interceptor paginationInnerInterceptor() { return new PageInterceptor(); } /** * 禁止全表更新 */ @Bean public InnerInterceptor blockAttackInnerInterceptor() { return new BlockAttackInnerInterceptor(); } /** * 乐观锁插件 */ @Bean public InnerInterceptor optimisticLockerInnerInterceptor() { return new OptimisticLockerInnerInterceptor(); } }