package com.vincent.rsf.httpaudit.config; import com.vincent.rsf.httpaudit.mapper.HttpAuditLogMapper; import com.vincent.rsf.httpaudit.props.HttpAuditProperties; import com.vincent.rsf.httpaudit.service.HttpAuditAsyncRecorder; import com.vincent.rsf.httpaudit.web.HttpAuditFilter; 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.Configuration; import org.springframework.core.Ordered; import org.springframework.core.env.Environment; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import java.util.concurrent.Executor; /** * 引入 rsf-http-audit 即生效(可 http-audit.enabled=false 关闭) */ @Configuration @EnableAsync @EnableConfigurationProperties(HttpAuditProperties.class) @ConditionalOnProperty(prefix = "http-audit", name = "enabled", havingValue = "true", matchIfMissing = true) @MapperScan("com.vincent.rsf.httpaudit.mapper") public class HttpAuditAutoConfiguration { @Bean public HttpAuditAsyncRecorder httpAuditAsyncRecorder(HttpAuditLogMapper httpAuditLogMapper) { return new HttpAuditAsyncRecorder(httpAuditLogMapper); } @Bean(name = "httpAuditExecutor") public Executor httpAuditExecutor() { ThreadPoolTaskExecutor ex = new ThreadPoolTaskExecutor(); ex.setCorePoolSize(2); ex.setMaxPoolSize(8); ex.setQueueCapacity(1000); ex.setThreadNamePrefix("http-audit-"); ex.initialize(); return ex; } @Bean public FilterRegistrationBean httpAuditFilterRegistration( HttpAuditAsyncRecorder recorder, HttpAuditProperties props, Environment env) { HttpAuditFilter filter = new HttpAuditFilter(recorder, props, env); FilterRegistrationBean reg = new FilterRegistrationBean<>(); reg.setFilter(filter); reg.addUrlPatterns("/*"); reg.setOrder(Ordered.HIGHEST_PRECEDENCE + 50); return reg; } }