package com.sinata.appointment.config; import cn.dev33.satoken.interceptor.SaInterceptor; import cn.dev33.satoken.stp.StpUtil; import jakarta.servlet.http.HttpServletRequest; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.DependsOn; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration @DependsOn("miniStpUtilInit") public class SaTokenConfigure implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { // 小程序域:StpLogic("mini"),与后台 StpUtil 完全隔离(密码仅后台有效) registry.addInterceptor( new SaInterceptor( handle -> { ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletRequest request = attributes == null ? null : attributes.getRequest(); if (request != null && "OPTIONS".equalsIgnoreCase(request.getMethod())) { return; } MiniStpUtil.checkLogin(); })) .addPathPatterns("/api/mini/**") .excludePathPatterns( "/api/mini/auth/login", "/api/mini/auth/phone-login", "/api/mini/appointments/shared/detail", "/api/mini/appointments/shared/visitor-codes", "/api/mini/appointments/shared/ticket-code") .order(0); // 平台管理端:sys_user 账密 registry.addInterceptor(new SaInterceptor(handle -> StpUtil.checkLogin())) .addPathPatterns("/api/**") .excludePathPatterns("/api/auth/login", "/api/auth/captcha", "/api/mini/**") .order(1); } }