Browse Source

跨域拦截继承WebMvcConfigurer

feature/0725lihuilin
jihaipeng 4 weeks ago
parent
commit
48d3657b63
  1. 17
      lottery-system/lottery-common/src/main/java/com/lottery/exception/GlobalExceptionHandler.java
  2. 12
      lottery-system/lottery-service/src/main/java/com/lottery/api/controller/ApiFundingController.java
  3. 14
      lottery-system/lottery-service/src/main/java/com/lottery/api/service/Impl/ApiFundingServiceImpl.java
  4. 32
      lottery-system/lottery-service/src/main/java/com/lottery/config/CorsConfig.java
  5. 13
      lottery-system/lottery-service/src/main/java/com/lottery/config/WebConfig.java
  6. 23
      lottery-system/lottery-service/src/main/java/com/lottery/interceptor/AuthInterceptor.java

17
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 com.lottery.result.Result;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpHeaders;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.BindException; import org.springframework.validation.BindException;
import org.springframework.validation.FieldError; import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException; 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.bind.annotation.RestControllerAdvice;
import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException; import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException;
import javax.servlet.http.HttpServletRequest;
import javax.validation.ConstraintViolation; import javax.validation.ConstraintViolation;
import javax.validation.ConstraintViolationException; import javax.validation.ConstraintViolationException;
import java.util.List; import java.util.List;
@ -105,8 +108,18 @@ public class GlobalExceptionHandler {
// 捕获自定义业务异常 // 捕获自定义业务异常
@ExceptionHandler(BusinessException.class) @ExceptionHandler(BusinessException.class)
public Result<Void> handleBusinessException(BusinessException e) {
return Result.failure(e.getCode(), e.getMessage());
public ResponseEntity<Result> handleBusinessException(BusinessException ex, HttpServletRequest request) {
HttpHeaders headers = new HttpHeaders();
headers.set("Access-Control-Allow-Origin", "*"); // 或指定域名
headers.set("Access-Control-Allow-Credentials", "true");
// 构建统一的错误响应
Result<Void> errorResult = Result.failure(ex.getCode(), ex.getMessage());
return ResponseEntity
.status(ex.getCode()) // 使用 BusinessException 中的状态码
.headers(headers)
.body(errorResult); // 返回 Result 作为响应体
} }
/** /**

12
lottery-system/lottery-service/src/main/java/com/lottery/api/controller/ApiFundingController.java

@ -34,21 +34,21 @@ public class ApiFundingController {
//前台获取活动详情 //前台获取活动详情
@PostMapping("/getActivity") @PostMapping("/getActivity")
public Result<ApiFundingVO> getFundingActivity(@RequestHeader String token){
if(token == null|| token.trim().isEmpty()){
public Result<ApiFundingVO> getFundingActivity(@RequestHeader String Apitoken){
if(Apitoken == null|| Apitoken.trim().isEmpty()){
return Result.failure("请先登录"); return Result.failure("请先登录");
} }
LOGGER.info("前台获取众筹活动所有数据"); LOGGER.info("前台获取众筹活动所有数据");
return fundingService.getActivityDetailOne(token);
return fundingService.getActivityDetailOne(Apitoken);
} }
//添加用户参与记录 //添加用户参与记录
@PostMapping("/addRecord") @PostMapping("/addRecord")
public Result<String> addRecord(@RequestHeader String token,@RequestBody @Valid FundingRecordDto fundingRecordDto) throws Exception {
if(token == null|| token.trim().isEmpty()){
public Result<String> addRecord(@RequestHeader String Apitoken,@RequestBody @Valid FundingRecordDto fundingRecordDto) throws Exception {
if(Apitoken == null|| Apitoken.trim().isEmpty()){
return Result.failure("请先登录"); return Result.failure("请先登录");
} }
LOGGER.info("添加用户参与记录,参数为{}", fundingRecordDto); LOGGER.info("添加用户参与记录,参数为{}", fundingRecordDto);
return fundingService.addRecord(token,fundingRecordDto);
return fundingService.addRecord(Apitoken,fundingRecordDto);
} }
} }

14
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.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.net.URLDecoder;
import java.nio.charset.StandardCharsets;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.*; import java.util.*;
@ -39,6 +41,7 @@ public class ApiFundingServiceImpl implements ApiIFundingService {
@Override @Override
public Result getActivityDetailOne(String token) { public Result getActivityDetailOne(String token) {
String token1 = URLDecoder.decode(token, StandardCharsets.UTF_8);
//根据活动id查询活动时间市场一市场二设置的初始时间俩个市场总助力次数 //根据活动id查询活动时间市场一市场二设置的初始时间俩个市场总助力次数
//先查询一下有几个活动开启 //先查询一下有几个活动开启
@ -67,11 +70,11 @@ public class ApiFundingServiceImpl implements ApiIFundingService {
try { try {
// 1. 定义请求 URL // 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<String, String> params = new HashMap<>(); Map<String, String> params = new HashMap<>();
params.put("token", token); // 如果接口需要 token 作为参数
params.put("token", token1); // 如果接口需要 token 作为参数
// 调用接口 // 调用接口
String response = HttpUtils.postUrlencoded(url, params); String response = HttpUtils.postUrlencoded(url, params);
JsonNode rootNode = objectMapper.readTree(response); JsonNode rootNode = objectMapper.readTree(response);
@ -153,7 +156,7 @@ public class ApiFundingServiceImpl implements ApiIFundingService {
@Override @Override
public Result<String> addRecord(String token,FundingRecordDto fundingRecordDto) { public Result<String> addRecord(String token,FundingRecordDto fundingRecordDto) {
String token1 = URLDecoder.decode(token, StandardCharsets.UTF_8);
//检查活动id是否存在 //检查活动id是否存在
Integer count = fundingMapper.selectActivityISExist(fundingRecordDto.getActivityId()); Integer count = fundingMapper.selectActivityISExist(fundingRecordDto.getActivityId());
if(count == null || count == 0){ if(count == null || count == 0){
@ -166,11 +169,12 @@ public class ApiFundingServiceImpl implements ApiIFundingService {
try { try {
// 1. 定义请求 URL // 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<String, String> params = new HashMap<>(); Map<String, String> params = new HashMap<>();
params.put("token", token); // 如果接口需要 token 作为参数
params.put("token", token1); // 如果接口需要 token 作为参数
// 调用接口 // 调用接口
String response = HttpUtils.postUrlencoded(url, params); String response = HttpUtils.postUrlencoded(url, params);
JsonNode rootNode = objectMapper.readTree(response); JsonNode rootNode = objectMapper.readTree(response);

32
lottery-system/lottery-service/src/main/java/com/lottery/config/CorsConfig.java

@ -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认证头
}
}

13
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 com.lottery.interceptor.AuthInterceptor;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration; 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.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@ -26,9 +27,15 @@ public class WebConfig implements WebMvcConfigurer {
registry.addInterceptor(authInterceptor) registry.addInterceptor(authInterceptor)
.addPathPatterns("/**") // 拦截所有请求 .addPathPatterns("/**") // 拦截所有请求
.excludePathPatterns( // 放行不需要校验的路径 .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("*");
}
} }

23
lottery-system/lottery-service/src/main/java/com/lottery/interceptor/AuthInterceptor.java

@ -25,11 +25,34 @@ public class AuthInterceptor implements HandlerInterceptor {
@Override @Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 放行 OPTIONS 预检请求
if ("OPTIONS".equals(request.getMethod())) {
return true;
}
// 1. 放行登录接口/login // 1. 放行登录接口/login
if ("/admin/user/login".equals(request.getRequestURI())) { if ("/admin/user/login".equals(request.getRequestURI())) {
return true; 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 // 2. 检查其他接口是否携带 Token
String token = request.getHeader("Token"); String token = request.getHeader("Token");

Loading…
Cancel
Save