package com.guo.learningprogresstracker.config; import cn.dev33.satoken.context.SaHolder; import cn.dev33.satoken.interceptor.SaInterceptor; import cn.dev33.satoken.stp.StpUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import java.util.Arrays; @Configuration @RequiredArgsConstructor @Slf4j public class WebMvcConfig implements WebMvcConfigurer { private final CorsProperties corsProperties; @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new SaInterceptor(handle -> { if ("OPTIONS".equalsIgnoreCase(SaHolder.getRequest().getMethod())) { return; } StpUtil.checkLogin(); })) .addPathPatterns("/**") .excludePathPatterns("/login"); } @Override public void addCorsMappings(CorsRegistry registry) { String[] origins = corsProperties.getAllowedOrigins(); boolean hasWildcard = origins != null && Arrays.asList(origins).contains("*"); log.info("允许cors的地址配置:{}", Arrays.toString(origins)); if (hasWildcard) { registry.addMapping("/**") .allowedOriginPatterns("*") .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") .allowedHeaders("*") .allowCredentials(true); } else { registry.addMapping("/**") .allowedOrigins(origins) .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") .allowedHeaders("*") .allowCredentials(corsProperties.getAllowCredentials() == null || corsProperties.getAllowCredentials()); } } }