From 48d3657b636b97a8b32fcd8a3a5a618f7ed704c0 Mon Sep 17 00:00:00 2001 From: jihaipeng <3204568531@qq.com> Date: Wed, 23 Jul 2025 10:42:18 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B7=A8=E5=9F=9F=E6=8B=A6=E6=88=AA=E7=BB=A7?= =?UTF-8?q?=E6=89=BFWebMvcConfigurer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lottery/exception/GlobalExceptionHandler.java | 17 ++++++++++-- .../api/controller/ApiFundingController.java | 12 ++++---- .../api/service/Impl/ApiFundingServiceImpl.java | 14 ++++++---- .../main/java/com/lottery/config/CorsConfig.java | 32 ---------------------- .../main/java/com/lottery/config/WebConfig.java | 13 +++++++-- .../com/lottery/interceptor/AuthInterceptor.java | 23 ++++++++++++++++ 6 files changed, 63 insertions(+), 48 deletions(-) delete mode 100644 lottery-system/lottery-service/src/main/java/com/lottery/config/CorsConfig.java diff --git a/lottery-system/lottery-common/src/main/java/com/lottery/exception/GlobalExceptionHandler.java b/lottery-system/lottery-common/src/main/java/com/lottery/exception/GlobalExceptionHandler.java index cbb393c..e8a3d06 100644 --- a/lottery-system/lottery-common/src/main/java/com/lottery/exception/GlobalExceptionHandler.java +++ b/lottery-system/lottery-common/src/main/java/com/lottery/exception/GlobalExceptionHandler.java @@ -2,6 +2,8 @@ package com.lottery.exception; import com.lottery.result.Result; import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpHeaders; +import org.springframework.http.ResponseEntity; import org.springframework.validation.BindException; import org.springframework.validation.FieldError; import org.springframework.web.bind.MethodArgumentNotValidException; @@ -10,6 +12,7 @@ import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException; +import javax.servlet.http.HttpServletRequest; import javax.validation.ConstraintViolation; import javax.validation.ConstraintViolationException; import java.util.List; @@ -105,8 +108,18 @@ public class GlobalExceptionHandler { // 捕获自定义业务异常 @ExceptionHandler(BusinessException.class) - public Result handleBusinessException(BusinessException e) { - return Result.failure(e.getCode(), e.getMessage()); + public ResponseEntity handleBusinessException(BusinessException ex, HttpServletRequest request) { + HttpHeaders headers = new HttpHeaders(); + headers.set("Access-Control-Allow-Origin", "*"); // 或指定域名 + headers.set("Access-Control-Allow-Credentials", "true"); + // 构建统一的错误响应 + Result errorResult = Result.failure(ex.getCode(), ex.getMessage()); + + + return ResponseEntity + .status(ex.getCode()) // 使用 BusinessException 中的状态码 + .headers(headers) + .body(errorResult); // 返回 Result 作为响应体 } /** diff --git a/lottery-system/lottery-service/src/main/java/com/lottery/api/controller/ApiFundingController.java b/lottery-system/lottery-service/src/main/java/com/lottery/api/controller/ApiFundingController.java index caa2301..bd2caea 100644 --- a/lottery-system/lottery-service/src/main/java/com/lottery/api/controller/ApiFundingController.java +++ b/lottery-system/lottery-service/src/main/java/com/lottery/api/controller/ApiFundingController.java @@ -34,21 +34,21 @@ public class ApiFundingController { //前台获取活动详情 @PostMapping("/getActivity") - public Result getFundingActivity(@RequestHeader String token){ - if(token == null|| token.trim().isEmpty()){ + public Result getFundingActivity(@RequestHeader String Apitoken){ + if(Apitoken == null|| Apitoken.trim().isEmpty()){ return Result.failure("请先登录"); } LOGGER.info("前台获取众筹活动所有数据"); - return fundingService.getActivityDetailOne(token); + return fundingService.getActivityDetailOne(Apitoken); } //添加用户参与记录 @PostMapping("/addRecord") - public Result addRecord(@RequestHeader String token,@RequestBody @Valid FundingRecordDto fundingRecordDto) throws Exception { - if(token == null|| token.trim().isEmpty()){ + public Result addRecord(@RequestHeader String Apitoken,@RequestBody @Valid FundingRecordDto fundingRecordDto) throws Exception { + if(Apitoken == null|| Apitoken.trim().isEmpty()){ return Result.failure("请先登录"); } LOGGER.info("添加用户参与记录,参数为{}", fundingRecordDto); - return fundingService.addRecord(token,fundingRecordDto); + return fundingService.addRecord(Apitoken,fundingRecordDto); } } diff --git a/lottery-system/lottery-service/src/main/java/com/lottery/api/service/Impl/ApiFundingServiceImpl.java b/lottery-system/lottery-service/src/main/java/com/lottery/api/service/Impl/ApiFundingServiceImpl.java index cfb1f09..049f7d6 100644 --- a/lottery-system/lottery-service/src/main/java/com/lottery/api/service/Impl/ApiFundingServiceImpl.java +++ b/lottery-system/lottery-service/src/main/java/com/lottery/api/service/Impl/ApiFundingServiceImpl.java @@ -14,6 +14,8 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.net.URLDecoder; +import java.nio.charset.StandardCharsets; import java.time.LocalDate; import java.time.LocalDateTime; import java.util.*; @@ -39,6 +41,7 @@ public class ApiFundingServiceImpl implements ApiIFundingService { @Override public Result getActivityDetailOne(String token) { + String token1 = URLDecoder.decode(token, StandardCharsets.UTF_8); //根据活动id查询活动时间,市场一,市场二,设置的初始时间,俩个市场总助力次数 //先查询一下有几个活动开启 @@ -67,11 +70,11 @@ public class ApiFundingServiceImpl implements ApiIFundingService { try { // 1. 定义请求 URL - String url = "https://api.homilychart.com/hljw/api/v2/member/info"; + String url = "http://39.101.133.168:8828/hljw/api/v2/member/info"; // 准备请求参数 Map params = new HashMap<>(); - params.put("token", token); // 如果接口需要 token 作为参数 + params.put("token", token1); // 如果接口需要 token 作为参数 // 调用接口 String response = HttpUtils.postUrlencoded(url, params); JsonNode rootNode = objectMapper.readTree(response); @@ -153,7 +156,7 @@ public class ApiFundingServiceImpl implements ApiIFundingService { @Override public Result addRecord(String token,FundingRecordDto fundingRecordDto) { - + String token1 = URLDecoder.decode(token, StandardCharsets.UTF_8); //检查活动id是否存在 Integer count = fundingMapper.selectActivityISExist(fundingRecordDto.getActivityId()); if(count == null || count == 0){ @@ -166,11 +169,12 @@ public class ApiFundingServiceImpl implements ApiIFundingService { try { // 1. 定义请求 URL - String url = "https://api.homilychart.com/hljw/api/v2/member/info"; + String url = "http://39.101.133.168:8828/hljw/api/v2/member/info"; // 准备请求参数 Map params = new HashMap<>(); - params.put("token", token); // 如果接口需要 token 作为参数 + + params.put("token", token1); // 如果接口需要 token 作为参数 // 调用接口 String response = HttpUtils.postUrlencoded(url, params); JsonNode rootNode = objectMapper.readTree(response); diff --git a/lottery-system/lottery-service/src/main/java/com/lottery/config/CorsConfig.java b/lottery-system/lottery-service/src/main/java/com/lottery/config/CorsConfig.java deleted file mode 100644 index 5da90ee..0000000 --- a/lottery-system/lottery-service/src/main/java/com/lottery/config/CorsConfig.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.lottery.config; - -import org.springframework.context.annotation.Configuration; -import org.springframework.web.servlet.config.annotation.CorsRegistry; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; - -/** - * @program: lottery - * @ClassName CorsConfig - * @description: - * @author: wwl - * @create: 2025-07-18 10:21 - * @Version 1.0 - **/ - -@Configuration -public class CorsConfig implements WebMvcConfigurer { - @Override - public void addCorsMappings(CorsRegistry registry) { -// registry.addMapping("/**") -// .allowedOrigins("*") // 允许所有来源 -// .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") -// .allowedHeaders("*"); - - registry.addMapping("/**") - .allowedOriginPatterns("*") // 允许所有来源模式 - .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") - .allowedHeaders("*") - .allowCredentials(true); // 允许携带凭证(如cookie、认证头) - - } -} diff --git a/lottery-system/lottery-service/src/main/java/com/lottery/config/WebConfig.java b/lottery-system/lottery-service/src/main/java/com/lottery/config/WebConfig.java index c4e871c..a58946d 100644 --- a/lottery-system/lottery-service/src/main/java/com/lottery/config/WebConfig.java +++ b/lottery-system/lottery-service/src/main/java/com/lottery/config/WebConfig.java @@ -3,6 +3,7 @@ package com.lottery.config; import com.lottery.interceptor.AuthInterceptor; import org.springframework.beans.factory.annotation.Autowired; 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; @@ -26,9 +27,15 @@ public class WebConfig implements WebMvcConfigurer { registry.addInterceptor(authInterceptor) .addPathPatterns("/**") // 拦截所有请求 .excludePathPatterns( // 放行不需要校验的路径 - "/login", // 登录接口 - "/swagger-ui/**", // Swagger 文档 - "/v3/api-docs/**" // OpenAPI 文档 + "/login" // 登录接口 ); } + + @Override + public void addCorsMappings(CorsRegistry registry) { + registry.addMapping("/**") + .allowedOrigins("*") // 允许所有来源 + .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") + .allowedHeaders("*"); + } } \ No newline at end of file diff --git a/lottery-system/lottery-service/src/main/java/com/lottery/interceptor/AuthInterceptor.java b/lottery-system/lottery-service/src/main/java/com/lottery/interceptor/AuthInterceptor.java index 1a67d06..210bb3b 100644 --- a/lottery-system/lottery-service/src/main/java/com/lottery/interceptor/AuthInterceptor.java +++ b/lottery-system/lottery-service/src/main/java/com/lottery/interceptor/AuthInterceptor.java @@ -25,11 +25,34 @@ public class AuthInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + // 放行 OPTIONS 预检请求 + if ("OPTIONS".equals(request.getMethod())) { + return true; + } // 1. 放行登录接口(/login) if ("/admin/user/login".equals(request.getRequestURI())) { return true; } + if("/api/prize/list".equals(request.getRequestURI())) { + return true; + } + if("/api/user/list".equals(request.getRequestURI())) { + return true; + } + if("/admin/win/list".equals(request.getRequestURI())) { + return true; + } + if("/api/lottery/start".equals(request.getRequestURI())) { + return true; + } + if("/api/funding/addRecord".equals(request.getRequestURI())) { + return true; + } + if("/api/funding/getActivity".equals(request.getRequestURI())) { + return true; + } + // 2. 检查其他接口是否携带 Token String token = request.getHeader("Token");