package com.tcm.training.admin.config;
|
|
import cn.dev33.satoken.interceptor.SaInterceptor;
|
import cn.dev33.satoken.context.SaHolder;
|
import cn.dev33.satoken.stp.StpUtil;
|
import com.tcm.training.admin.common.xss.XssParamInterceptor;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.context.annotation.Configuration;
|
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
|
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
|
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
|
import java.io.File;
|
|
@Configuration
|
public class SaTokenWebConfig implements WebMvcConfigurer {
|
|
private final XssParamInterceptor xssParamInterceptor;
|
|
@Value("${app.upload.dir:uploads}")
|
private String uploadDir;
|
|
@Value("${app.upload.path-prefix:/uploads}")
|
private String pathPrefix;
|
|
public SaTokenWebConfig(XssParamInterceptor xssParamInterceptor) {
|
this.xssParamInterceptor = xssParamInterceptor;
|
}
|
|
@Override
|
public void addInterceptors(InterceptorRegistry registry) {
|
registry.addInterceptor(new SaInterceptor(handle -> {
|
if ("OPTIONS".equalsIgnoreCase(SaHolder.getRequest().getMethod())) {
|
return;
|
}
|
StpUtil.checkLogin();
|
}))
|
.addPathPatterns("/api/**", "/api/v1/**")
|
.excludePathPatterns("/api/auth/login","/api/auth/captcha");
|
|
registry.addInterceptor(xssParamInterceptor)
|
.addPathPatterns("/api/**", "/api/v1/**");
|
}
|
|
/** 将本地上传目录映射为静态资源,可通过 /uploads/** 访问 */
|
@Override
|
public void addResourceHandlers(ResourceHandlerRegistry registry) {
|
// 转为绝对路径,确保 file: 协议正确
|
String absPath = new File(uploadDir).getAbsolutePath();
|
registry.addResourceHandler(pathPrefix + "/**")
|
.addResourceLocations("file:" + absPath + "/");
|
}
|
}
|