diff --git a/.vscode/launch.json b/.vscode/launch.json index 014e576..edb5398 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -7,7 +7,6 @@ "hostName": "localhost", "port": "5005" }, - java { "type": "java", "name": "CriticalScenarioApplication", diff --git a/business-css/docs/分析模拟系统方案.md b/business-css/docs/分析模拟系统方案.md index 9886ead..d947c9c 100644 --- a/business-css/docs/分析模拟系统方案.md +++ b/business-css/docs/分析模拟系统方案.md @@ -51,6 +51,23 @@ 4. 增加 OpenAPI 文档与前端集成接口规范。 5. 引入结果持久化与查询报表。 +## 调试与开发指南 + +### Maven 命令行启动 + 远程调试 + +如果您偏好使用命令行启动,或者需要模拟特定的 Maven 环境,可采用以下方式: + +1. **启动应用**: + 在终端中运行以下命令,该命令会以调试模式启动应用并监听 `5005` 端口(`suspend=n` 表示不等待调试器连接直接启动,如需等待可改为 `y`)。 + > 注意:PowerShell 中需要使用单引号包裹 JVM 参数,防止解析错误。 + + ```bash + mvn -DskipTests spring-boot:run -pl business-css '-Dspring-boot.run.jvmArguments=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005' + ``` + +2. **附加调试器**: + 应用启动后,转到 IDE 的 "运行和调试" (Run and Debug) 面板,选择 **"Attach to Remote Program(5005)"** 配置(需确保 `.vscode/launch.json` 中已存在相应配置),然后点击运行。IDE 将连接到正在运行的 Maven 进程,即可开始断点调试。 + ## 运维与配置 - 端口默认 `8082`,环境覆盖通过 `application.yml` 与外部化配置。 - 数据库连接按环境注入(dev/test/prod)。 diff --git a/business-css/pom.xml b/business-css/pom.xml index 925ee02..fdadb3a 100644 --- a/business-css/pom.xml +++ b/business-css/pom.xml @@ -64,7 +64,14 @@ platform 1.0 plain - + + + + + com.baomidou + mybatis-plus-boot-starter + 3.5.6 + diff --git a/framework/src/main/java/com/yfd/platform/config/SecurityConfig.java b/framework/src/main/java/com/yfd/platform/config/SecurityConfig.java index a4b2343..4c9710b 100644 --- a/framework/src/main/java/com/yfd/platform/config/SecurityConfig.java +++ b/framework/src/main/java/com/yfd/platform/config/SecurityConfig.java @@ -4,6 +4,7 @@ import com.yfd.platform.config.bean.LoginProperties; import com.yfd.platform.exception.AccessDeniedHandExcetion; import com.yfd.platform.exception.AuthenticationException; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -19,7 +20,10 @@ import org.springframework.security.web.authentication.UsernamePasswordAuthentic @Configuration public class SecurityConfig { - + // 1. 注入配置项,默认为 false + @Value("${security.dev.permit:false}") + private boolean devPermit; + @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); @@ -50,31 +54,36 @@ public class SecurityConfig { http .csrf(csrf -> csrf.disable()) .sessionManagement(sm -> sm.sessionCreationPolicy(SessionCreationPolicy.STATELESS)) - .authorizeHttpRequests(auth -> auth - .requestMatchers("/user/login").anonymous() - .requestMatchers("/user/code").permitAll() - .requestMatchers(HttpMethod.GET, - "/*.html", - "/webSocket/**", - "/assets/**", - "/icon/**").permitAll() - .requestMatchers( - "/swagger-ui.html", - "/swagger-ui/**", - "/v3/api-docs/**", - "/v3/api-docs.yaml", - "/swagger-resources/**", - "/webjars/**", - "/*/api-docs").permitAll() - .requestMatchers( - "/report/**", - "/images/**", - "/pageimage/**", - "/avatar/**", - "/systemurl/**", - "/api/imageserver/upload").permitAll() - .anyRequest().authenticated() - ) + .authorizeHttpRequests(auth -> { + // 如果配置为 true,则允许所有请求 + if (devPermit) { + auth.anyRequest().permitAll(); + } else { + auth.requestMatchers("/user/login").anonymous() + .requestMatchers("/user/code").permitAll() + .requestMatchers(HttpMethod.GET, + "/*.html", + "/webSocket/**", + "/assets/**", + "/icon/**").permitAll() + .requestMatchers( + "/swagger-ui.html", + "/swagger-ui/**", + "/v3/api-docs/**", + "/v3/api-docs.yaml", + "/swagger-resources/**", + "/webjars/**", + "/*/api-docs").permitAll() + .requestMatchers( + "/report/**", + "/images/**", + "/pageimage/**", + "/avatar/**", + "/systemurl/**", + "/api/imageserver/upload").permitAll() + .anyRequest().authenticated(); + } + }) .cors(cors -> {}); http.addFilterBefore(jwtAuthenticationTokenFilter, UsernamePasswordAuthenticationFilter.class);