Ver código fonte

调整模拟测试,改为实际请求。自动适配解决 Spring Security 线程问题

mxd 4 anos atrás
pai
commit
cce0220782

+ 28 - 4
src/main/java/org/ssssssss/magicapi/spring/boot/starter/MagicAPIAutoConfiguration.java

@@ -39,8 +39,8 @@ import org.ssssssss.magicapi.provider.impl.DefaultMagicAPIService;
 import org.ssssssss.magicapi.provider.impl.DefaultPageProvider;
 import org.ssssssss.magicapi.provider.impl.DefaultResultProvider;
 import org.ssssssss.magicapi.utils.ClassScanner;
-import org.ssssssss.script.MagicPackageLoader;
 import org.ssssssss.script.MagicModuleLoader;
+import org.ssssssss.script.MagicPackageLoader;
 import org.ssssssss.script.MagicScript;
 import org.ssssssss.script.MagicScriptEngine;
 import org.ssssssss.script.functions.ExtensionMethod;
@@ -77,6 +77,7 @@ public class MagicAPIAutoConfiguration implements WebMvcConfigurer {
 
 	public MagicAPIAutoConfiguration(MagicAPIProperties properties) {
 		this.properties = properties;
+		setupSpringSecurity();
 	}
 
 	private String redirectIndex(HttpServletRequest request) {
@@ -213,11 +214,17 @@ public class MagicAPIAutoConfiguration implements WebMvcConfigurer {
 		requestHandler.setHttpMessageConverters(httpMessageConverters);
 		requestHandler.setResultProvider(resultProvider);
 		requestHandler.setThrowException(properties.isThrowException());
+
+		WebUIController webUIController = createWebUIController(resultProvider, apiServiceProvider, mappingHandlerMapping);
+
+		requestHandler.setWebUIController(webUIController);
+		requestHandler.setDebugTimeout(properties.getDebugConfig().getTimeout());
+
 		mappingHandlerMapping.setHandler(requestHandler);
 		mappingHandlerMapping.setRequestMappingHandlerMapping(requestMappingHandlerMapping);
 		mappingHandlerMapping.setMagicApiService(apiServiceProvider);
 		// 设置拦截器
-		setupRequestInterceptor(createWebUIController(resultProvider, apiServiceProvider, mappingHandlerMapping), requestHandler);
+		setupRequestInterceptor(webUIController, requestHandler);
 		// 注册所有映射
 		mappingHandlerMapping.registerAllMapping();
 		// 自动刷新
@@ -225,6 +232,25 @@ public class MagicAPIAutoConfiguration implements WebMvcConfigurer {
 		return requestHandler;
 	}
 
+	private void setupSpringSecurity(){
+		Class<?> clazz = null;
+		try {
+			clazz = Class.forName("org.springframework.security.core.context.SecurityContextHolder");
+		} catch (ClassNotFoundException ignored) {
+
+		}
+		if(clazz != null){
+			try {
+				Method method = clazz.getDeclaredMethod("setStrategyName", String.class);
+				method.setAccessible(true);
+				method.invoke(clazz,"MODE_INHERITABLETHREADLOCAL");
+				logger.info("自动适配 Spring Security 成功");
+			} catch (Exception ignored) {
+				logger.info("自动适配 Spring Security 失败");
+			}
+		}
+	}
+
 	/**
 	 * 注入数据库查询模块
 	 */
@@ -349,8 +375,6 @@ public class MagicAPIAutoConfiguration implements WebMvcConfigurer {
 			return null;
 		}
 		WebUIController controller = new WebUIController();
-		controller.setResultProvider(resultProvider);
-		controller.setDebugTimeout(properties.getDebugConfig().getTimeout());
 		controller.setMagicApiService(apiServiceProvider);
 		controller.setMappingHandlerMapping(mappingHandlerMapping);
 		SecurityConfig securityConfig = properties.getSecurityConfig();