diff --git a/src/main/java/com/example/demo/Export/ExportServiceImpl.java b/src/main/java/com/example/demo/Export/ExportServiceImpl.java index 1e177eb..b822651 100644 --- a/src/main/java/com/example/demo/Export/ExportServiceImpl.java +++ b/src/main/java/com/example/demo/Export/ExportServiceImpl.java @@ -83,6 +83,8 @@ public class ExportServiceImpl implements ExportService{ // 2. 构造完整的 JSON 数据(包含所有请求参数) Map exportData = new HashMap<>(); exportData.put("recordId", recordId); + // 添加 token 到 exportData + exportData.put("token", token); // 手动构造请求数据(避免 toString() 只返回部分字段) Map requestData = new HashMap<>(); @@ -120,6 +122,7 @@ public class ExportServiceImpl implements ExportService{ dto.setUrl(""); dto.setFileName(fileName); dto.setDataNum(0); + try{ // 调用方式 GoldDetailMapper.ExportRecordIdHolder idHolder = new GoldDetailMapper.ExportRecordIdHolder(); @@ -137,6 +140,8 @@ public class ExportServiceImpl implements ExportService{ // 2. 构造完整的 JSON 数据(包含所有请求参数) Map exportData = new HashMap<>(); exportData.put("recordId", recordId); + // 添加 token 到 exportData + exportData.put("token", token); // 手动构造请求数据(避免 toString() 只返回部分字段) Map requestData = new HashMap<>(); @@ -174,6 +179,7 @@ public class ExportServiceImpl implements ExportService{ dto.setUrl(""); dto.setFileName(fileName); dto.setDataNum(0); + try{ // 调用方式 GoldDetailMapper.ExportRecordIdHolder idHolder = new GoldDetailMapper.ExportRecordIdHolder(); @@ -191,6 +197,8 @@ public class ExportServiceImpl implements ExportService{ // 2. 构造完整的 JSON 数据(包含所有请求参数) Map exportData = new HashMap<>(); exportData.put("recordId", recordId); + // 添加 token 到 exportData + exportData.put("token", token); // 手动构造请求数据(避免 toString() 只返回部分字段) Map requestData = new HashMap<>(); diff --git a/src/main/java/com/example/demo/Util/JWTUtil.java b/src/main/java/com/example/demo/Util/JWTUtil.java index b13e23d..373f780 100644 --- a/src/main/java/com/example/demo/Util/JWTUtil.java +++ b/src/main/java/com/example/demo/Util/JWTUtil.java @@ -8,12 +8,16 @@ import io.jsonwebtoken.JwtBuilder; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; import java.util.Base64; +import java.util.Collection; import java.util.Date; import java.util.UUID; @@ -178,6 +182,18 @@ public class JWTUtil { return null; } + /** + * 根据JWT令牌解析出Authentication对象 + * @param jwt JWT令牌 + * @param cls 用户详情类的Class对象 + * @return Authentication对象 + * @throws Exception 解析失败时抛出异常 + */ + public static Authentication getAuthenticationFromToken(String jwt, Class cls) throws Exception { + UserDetails userDetails = getUserDetails(jwt, cls); + Collection authorities = userDetails.getAuthorities(); + return new UsernamePasswordAuthenticationToken(userDetails, null, authorities); + } // public static void main(String[] args) throws Exception { // diff --git a/src/main/java/com/example/demo/serviceImpl/ExportExcelServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/ExportExcelServiceImpl.java index 0b304a5..119bcf6 100644 --- a/src/main/java/com/example/demo/serviceImpl/ExportExcelServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/ExportExcelServiceImpl.java @@ -5,10 +5,12 @@ import com.alibaba.excel.EasyExcel; import com.alibaba.excel.ExcelWriter; import com.alibaba.excel.write.metadata.WriteSheet; import com.example.demo.Util.ExcelUploadUtil; +import com.example.demo.Util.JWTUtil; import com.example.demo.controller.ConsumeController; import com.example.demo.controller.GoldDetailController; import com.example.demo.controller.RechargeController; import com.example.demo.controller.RefundController; +import com.example.demo.domain.entity.Admin; import com.example.demo.domain.entity.Export; import com.example.demo.domain.entity.User; import com.example.demo.domain.export.Goldmingxi; @@ -28,6 +30,11 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.core.userdetails.UserDetails; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -58,7 +65,8 @@ public class ExportExcelServiceImpl implements ExportExcelService { private RefundController refundController; @Autowired private ConsumeController consumeController; - + @Autowired + private AuthenticationManager authenticationManager; // 每页查询的数据量 private static final int PAGE_SIZE = 1000; @Autowired @@ -507,6 +515,7 @@ public class ExportExcelServiceImpl implements ExportExcelService { long startTime = System.currentTimeMillis(); Long recordId = null; String fileName = null; + String token = null; File tempFile = null; OutputStream outputStream = null; ExcelWriter excelWriter = null; @@ -516,6 +525,7 @@ public class ExportExcelServiceImpl implements ExportExcelService { JsonNode rootNode = objectMapper.readTree(message); // 2. 获取基本参数 recordId = rootNode.path("recordId").asLong(); + token = rootNode.path("token").asText(); JsonNode requestDataNode = rootNode.path("requestData"); JsonNode rechargeNode = requestDataNode.path("rechargeUser"); RechargeUser rechargeUser = objectMapper.treeToValue(rechargeNode, RechargeUser.class); @@ -552,7 +562,16 @@ public class ExportExcelServiceImpl implements ExportExcelService { page.setRechargeUser(rechargeUser); boolean hasMore = true; while (hasMore) { - Result pageResult = rechargeController.selcetBy( page); + try { + Authentication authentication = JWTUtil.getAuthenticationFromToken(token, Admin.class); + if (authentication != null) { + System.out.println("Authentication: " + authentication); + SecurityContextHolder.getContext().setAuthentication(authentication); // 存储认证信息 + } + } catch (Exception e) { + e.printStackTrace(); + } + Result pageResult = rechargeController.selcetBy(page); Integer code = pageResult.getCode(); Object data = pageResult.getData(); @@ -715,6 +734,7 @@ public class ExportExcelServiceImpl implements ExportExcelService { Long recordId = null; String fileName = null; File tempFile = null; + String token = null; OutputStream outputStream = null; ExcelWriter excelWriter = null; @@ -724,6 +744,7 @@ public class ExportExcelServiceImpl implements ExportExcelService { // 2. 获取基本参数 recordId = rootNode.path("recordId").asLong(); JsonNode requestDataNode = rootNode.path("requestData"); + token = rootNode.path("token").asText(); JsonNode consumeUserNode = requestDataNode.path("consumeUser"); ConsumeUser consumeUser = objectMapper.treeToValue(consumeUserNode, ConsumeUser.class); // 3. 验证导出记录 @@ -752,6 +773,15 @@ public class ExportExcelServiceImpl implements ExportExcelService { Integer totalCount = 0; boolean hasMore = true; while (hasMore) { + try { + Authentication authentication = JWTUtil.getAuthenticationFromToken(token, Admin.class); + if (authentication != null) { + System.out.println("Authentication: " + authentication); + SecurityContextHolder.getContext().setAuthentication(authentication); // 存储认证信息 + } + } catch (Exception e) { + e.printStackTrace(); + } Result pageResult = consumeController.selcetBy(page); Integer code = pageResult.getCode(); Object data = pageResult.getData(); @@ -914,6 +944,7 @@ public class ExportExcelServiceImpl implements ExportExcelService { long startTime = System.currentTimeMillis(); Long recordId = null; String fileName = null; + String token = null; File tempFile = null; OutputStream outputStream = null; ExcelWriter excelWriter = null; @@ -923,6 +954,7 @@ public class ExportExcelServiceImpl implements ExportExcelService { JsonNode rootNode = objectMapper.readTree(message); // 2. 获取基本参数 recordId = rootNode.path("recordId").asLong(); + token = rootNode.path("token").asText(); JsonNode requestDataNode = rootNode.path("requestData"); JsonNode refundUserNode = requestDataNode.path("refundUser"); RefundUser refundUser = objectMapper.treeToValue(refundUserNode, RefundUser.class); @@ -954,6 +986,15 @@ public class ExportExcelServiceImpl implements ExportExcelService { Integer totalCount = 0; boolean hasMore = true; while (hasMore) { + try { + Authentication authentication = JWTUtil.getAuthenticationFromToken(token, Admin.class); + if (authentication != null) { + System.out.println("Authentication: " + authentication); + SecurityContextHolder.getContext().setAuthentication(authentication); // 存储认证信息 + } + } catch (Exception e) { + e.printStackTrace(); + } Result pageResult = refundController.selcetBy(page); Integer code = pageResult.getCode(); Object data = pageResult.getData(); diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 9436f6f..93468e1 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -67,9 +67,9 @@ spring: data: redis: database: 0 - host: 18.143.76.3 - port: 10703 - password: Ngc0FYUTA6h3wC5J + host: localhost + port: 6379 +# password: Ngc0FYUTA6h3wC5J lettuce: pool: