配置详解-Config类
章节简介
本章节介绍了config包下所有Config类的用途,如果项目中还有新的Config类,也应新建在此目录下
CaptchaConfig.java
本类用于配置验证码的参数,依赖于kaptcha库,可自行按需修改验证码的样式
DictCacheInitConfig.java
本类通过@PostConstruct注解,实现初始化系统字典缓存,以及其他字典缓存。详细可参考数据字典
GlobalCorsConfig.java
本类实现了SpringMvc的FilterRegistrationBean,用于全局跨域配置
LocalOssConfig.java
本类通过实现SpringMvc的WebMvcConfigurer接口以实现将本地磁盘文件映射至静态资源目录,实现接口访问。
文件路径及访问地址配置在相应环境的application.yml中,如下的配置代表
文件存储路径:D:/file/xxx.jpg
访问地址:http://localhost:9090/vpath/data/xxx.jpg
oss:
config:
#只有配置LocalServer才生效
default-type: LocalServer
support-ext: xls,xlsx,doc,docx,ppt,pptx,pdf,txt,jpg,jpeg,png,gif,bmp,zip,rar,7z,pdf,mp4,avi,mov
local-oss:
path: D:/file/
url: /vpath/data
文件相关其他信息可参考文件上传
LogConfig.java
此类依托于@SysLog注解实现日志记录,详细可参考日志
MinioConfig.java
与LocalOssConfig相似,此类用于配置Minio对象存储的相关信息。
oss:
config:
#Minio生效
default-type: Minio
support-ext: xls,xlsx,doc,docx,ppt,pptx,pdf,txt,jpg,jpeg,png,gif,bmp,zip,rar,7z,pdf,mp4,avi,mov
minio:
endpoint: https://minio-s3.cnsaas.com
accessKey: Key
secret: 密钥
bucket: 桶
文件相关其他信息可参考文件上传
MyBatisPlusConfig.java
本类为MyBatisPlus的核心配置类,请参考MyBatisPlus官方文档进行配置。参考地址:https://baomidou.com/
OptimisticLockerConfig.java
系统的 CRUD 逻辑依赖于 MyBatis-Plus提供的ServiceImpl,并通过@Version注解实现乐观锁机制。然而,在使用updateById方法时,若发生乐观锁冲突, MyBatis-Plus仅会返回false,而不会抛出异常。这意味着如果业务代码未显式判断updateById的返回值, 将可能导致数据在不一致状态下继续执行后续流程,对业务来说是极具风险的隐患。
如果每个业务点都手动判断updateById的执行结果,不仅容易遗漏,还会显著增加开发成本。 因此,系统通过封装统一的更新逻辑类,对updateById进行增强:在更新失败(如因乐观锁冲突)时,主动抛出异常,从而强制中断业务流程,确保数据一致性和业务安全性。
//切点配置
@Pointcut("execution(* com.baomidou.mybatisplus.core.mapper.BaseMapper.updateById(..)) || " +
"execution(* com.baomidou.mybatisplus.core.mapper.BaseMapper.deleteById(..))")
public void updateAndDeleteMethods() {
// Do nothing because of Aspect Entry Point!
}
SaTokenConfig.java
本类基于SaServletFilter的过滤器配置了Sa-Token的运行逻辑。
1、IGNORE_URL常量配置了无需鉴权即可访问的接口,例如登录接口、验证码生成等。
/**
* Sa-Token 忽略认证的接口
*/
private static final List<String> IGNORE_URL = CollectionUtil.newArrayList(
"/vpath/**",
"/fykj/login",
"/fykj/captcha"
//...
);
2、getSaServletFilter方法配置了Sa-Token的过滤器,setAuth()中判断当前用户登录状态,若未登录则抛出异常。并且校验接口权限,详细可参考接口、角色。
如果用户拥有admin角色,则直接放行
@Bean
public SaServletFilter getSaServletFilter() {
return new SaServletFilter()
// 指定 拦截路由 与 放行路由
.addInclude("/**")
.setExcludeList(IGNORE_URL)
// 认证函数: 每次请求执行
.setAuth(obj -> {
// 登录校验 -- 拦截所有路由,并排除/login等无需认证的路由
if (!StpUtil.isLogin()) {
throw new BusinessException(ResultCode.TOKEN_ERROR_CODE, "已退出登录,请重新登录");
}
// admin直接放
if (Oauth2Util.isAdmin()) {
return;
}
// 校验接口权限
validApi();
})
.setError(e -> {
// 异常处理函数:每次认证函数发生异常时执行此函数
})
.setBeforeAuth(obj -> {
// 处理Option请求,直接放行
});
}
3、initRoleApiRelation()方法用于初始化接口与角色的关系,详细可参考接口、角色。
4、validApi()方法实现了用户接口权限校验逻辑,详细可参考接口、角色。
ThreadPoolConfig.java
本类配置了默认的线程池,可以根据项目需求自行配置。
XxlConfig.java
本类注入了XXL-JOB的核心调度器,具体可参考定时任务。
